게임엔진/Unreal
[Unreal] FTimerManager 타이머 설정
#include "TimerManager.h"를 추가해주면 된다. 생성자가 FTimerManager() = delete;로 되어있기 때문에 인스턴스화 시킬 수 없다. 각 인자 값으론 FTimerHandle 쓰여질 핸들 InRate 반복될 횟수 inbLoop 무한반복 여부 InFirstDelay 첫 발동까지 대기시간 const FTimerDelegate&, const FTimerDynamicDelegate&, TFunction&& 함수 포인터 UserClass* 타이머를 적용할 대상 오브젝트 FTimerHandle handle; float rate = 1.f; float inFirstDelay = 0.f; bool bLoop = false; FTimerDelegate timerDele; FTimerDyna..
[Unreal] 화면 정중앙 조준선 위치 기반 레이캐스트
FVector startPos = 소환위치(FVector); float maxRange = 10000.f; // 카메라 기반으로 구하기 auto cameraManager = UGameplayStatics::GetPlayerCameraManager(GetWorld(), 0); auto traceStartPos = UKismetMathLibrary::ProjectPointOnToPlane(cameraManager->GetCameraLocation(), startPos, cameraManager->GetActorForwardVector()); auto traceEndPos = traceStartPos + (cameraManager->GetActorForwardVector() * maxRange); // 게임 ..
[Unreal] 문자열 변환 - FName, FText, FString
문자열 클래스간 변환 변환 형식 변환 방법 FName → FString TestString = TestName.ToString(); FName → FText TestText = FText::FromName(TestName); FString → FName TestName = FName(*TestString); // 손실 위험 있음. FName이 대소문자 구분 없음 FString → FText TestText = FText::FromString(TestString); FText → FString TestString = TestText.ToString(); // 안전하지 않음. 언어 변환시 손실 위험 때문 FText → FName FText → FString -> FName // 직접 변환 없음 // 손실 위..
[Unreal] FVector과 FRotator간 변환
// FVector > FRotator FRotator::MakeFromEuler(FVector); FVector 변수.Rotation(); // FRotator > FVector FRotator 변수.Vector();
[Unreal] C++ 버전 변경(C++ 20기능 사용) 방법과 모듈
언리얼에선 디버그 속성 통해 전체 .sln 파일에 대해 언어를 지정 할 수가 없다. UE 5 기준 전체 언리얼 모듈들은 C++ 17버전으로 작성 되어있다, 따라서 20 버전으로 업그레이드 한 후 참조할 때 에러가 날 수 있다. 각 모듈 Build.cs 파일 내에 // CppStandardVersion.Latest 즉 최신 버전 설정 시 17 버전으로 설정 됨. CppStandard = CppStandardVersion.Cpp17; // C++ 20 기능 사용하고자 할 때 아래와 같이 작성하면 된다. CppStandard = CppStandardVersion.Cpp20; 아래는 현재 사용하고 있는 직접 구현한 모듈들이다. Objects 같은 경우엔 탄알(파티클 이펙트) Niagara System을 사용해야..
[Unreal] 마우스 방향을 따라가는 총기 애니메이션 (Aim Offset)
Animation에는 Aim Offset과 Aim Offset1D가 존재한다. 가장 큰 차이점은 파라미터 개수의 차이다. 에임 오프셋은 하나의 애니메이션이기 때문에 애님 인스턴스에서 설정 해줘야한다. 가장 눈여겨봐야할건 Additive Settings이다 Aim Offset과 구성할 애니메이션 Sequence이 Preview Base Pose가 일치 해야한다. 애니메이션 Sequence 내 Additive Anim Type을 Mesh Space와 Base Pose Type을 Selected animation frame으로 설정하는것도 중요하다. 가운데, 가운데 상, 가운데 하, 오른쪽, 오른쪽 상, 오른쪽 하, 왼쪽, 왼쪽 상, 왼쪽 하가 각각 구성 후 추가한다. Horizontal Axis을 Yaw로 ..
[Unreal] RootComponent 루트 컴포넌트
루트 컴포넌트는 충돌 인식과 월드 스페이스에서 오브젝트의 위치를 결정하고 항상 충돌을 탐지하는 컴포넌트(메쉬(Skeletal, Static) , 충돌체)여야 한다. 메쉬 컴포넌트를 설정했을 시 Mobility라는 항목이 추가된걸 확인해 볼 수가 있다, 이는 크게 3개로 나뉜다. 추가적으로 Set Simulate Physics를 할 시 무조건 Movable이여야 한다. Static > 맵에서 움직이진 않고 라이트닝 또한 인게임 중 위치를 바꿀 수가 없다. Stationary > 맵에서 움직이진 않지만 라이트닝 위치를 인게임에서 바꿀 수가 있다. Movable > 맵과 라이트닝 동일하게 움직일 수가 있다. 참고 : https://docs.unrealengine.com/4.26/en-US/BuildingWor..
[Unreal] RadialForceComponent 하중을 가하는 컴포넌트
Radial Force Component를 추가한 후 루트 컴포넌트에 부착한다. 추가적으로 대상 오브젝트는 항상 Simulate Physics true 상태여야 한다. Radius > 범위 Object Types To Affect > 하중을 가하고자 하는 오브젝트(엑터) 타입 Impulse Strength > Fire Impulse 함수를 통해 하중을 단방에 가할 힘 Impulse Vel Change > 하중을 대상 오브젝트 무게와 상관없이 일정하게 가하는 것 Force Strength > 별다른 함수 호출 없이 하중 컴포넌트가 Activate 상태일 때 서서히 하중을 가할 힘 캐릭터는 폭발물에 하중을 가할 필요가 없으므로 제거해줬다. RadialForceComp->RemoveObjectTypeToAff..
[Unreal] 언리얼 콜리전(충돌), 트레이스(추적) 유형
언리얼의 콜리전은 오브젝트 타입과 트레이스 타입으로 나뉘고 각 사항에 대해 트레이스 처리를 할 수 있다. c++ 과 BP에 대응하는 함수는 아래와 같다. 여기서는 LineTrace만을 예로들었으나 구체, 박스, 캡슐등의 트래이스 모양및 다중트래이스 처리도 할수 있으니 필요하면 찾아서 쓰자(사용법은 같다. 반환되는값의 차이.) (ECollisionChannel? EObjectTypeQuery?? ETraceTypeQuery??? ) 1. 언리얼의 기본및 사용자정의 오브잭트채널, 트레이스채널은 모두 ECollisionChannel한군데에 세팅되고 트래이스에는 이값들이 사용된다. 2. EObjectTypeQuery, ETraceTypeQuery 는 ECollisionChannel에 세팅되어 있는 값을 찾아오기..
언리얼엔진5 다운로드 및 4에서 업그레이드 방법
여기서 .zip 파일로 받던지 git clone을 한다. 총 용량은 대략 120gb이다, 속도 향상을 시키기 위해선 ssd에 설치하는건 필수, https://github.com/EpicGames/UnrealEngine 난 다 필요없고 오직 기본꺼만 필요한다하면 에픽 스토어 앱 통해서 다운 받아도 된다. 프로젝트를 까보면 아래와 같이 2개의 .bat 파일이 있을 것이다, 우선 Setup부터 실행시킨다. .uproject 파일 우클릭 후 버전을 선택했을 시 아래와 같은 에러가 뜬다. 아까 위에 GenerateProjectFiles.bat를 실행시킨 후 설치 해야한다. 이제는 아래와 같은 폴더들을 삭제 후 재생성한다, .sln 파일 열었을 때 아래와 같이 뜬다면 정상적으로 된 것이다. 하지만 여기서 문제점이 ..