게임엔진

    [Unreal] 캐릭터 이동 관련 컴포넌트 (UCharacter / UPawn MovementComponent*)

    캐릭터의 이동 관한 행동을 담당하며 대표적인 기능들은 아래와 같다. 캐릭터 최대치 변경 수영 속도 하중 힘 걸음 속도 숙인 채 걷는 속도 캐릭터가 특정 행동 진행 중일 시 숙이는 중 낙하하는 중 날아다니는 중 지상에 다니는 중 (걷기, 운전 등) 수영 하는 중 걸을 수 있는 상태 또는 걷는 중 캐릭터가 숙이는 함수와 숙인 상태에서 일어서는 함수 플레이어가 수영하는 함수 플레이어가 점프하는 함수 플레이어가 엎드리는 함수는 따로 구현할 필요가 있다. 관련 도튜먼트 : https://docs.unrealengine.com/5.0/enUS/API/Runtime/Engine/GameFramework/UCharacterMovementComponent/

    [Unreal] C++ 인터페이스 (UInterface)

    생성 방법은 우클릭 후 > New C++ Class > Unreal Interface 언리얼에선 모든 오브젝트들은 인스턴스화가 되어야 되기 때문에 인터페이스가 단순한 가상함수 (순수 가상 함수 X)이다. 원형은 아래와 같다. UWeaponInterface는 그대로 놔둔다, 리플렉션 전용이기에 절대로 지워서는 안된다. 아래에 있는 I로 시작되는 IWeaponInterface에 구현부를 넣는다. 헤더파일 #pragma once #include "CoreMinimal.h" #include "UObject/Interface.h" #include "WeaponInterface.generated.h" // This class does not need to be modified. UINTERFACE(MinimalAP..

    [Unity] / [SerializeField] [HideInInspector] [Serializable] 어트리뷰트 인스펙터 공개/비공개

    public 사용시 인스펙터에 오픈시켜 값을 수정 할 수 있으며 타 클래스에서도 접근이 가능하다. 유니티는 public만 직렬화 해주는데 private 또는 protected 필드를 명시적으로 직렬화 해줌으로서 인스펙터에 오픈 시켜준다. 단, 유니티의 공식 가이드에서는 이것을 "특별한 경우가 아니면 사용하지 않는다."라며, "public"을 추천하고 있다. 반대로, 변수의 접근 제한자가 "public"으로 지정되어 있지만, 유니티 에디터의 Inspector에서 노출되는 것을 막기 위해서는 "[HideInInspector]" 키워드를 사용한다. (참고로, HideInInspector 키워드는 키워드 아래에 있는 모든 변수를 노출하지 않지만, SerializeField 키워드는 키워드 바로 다음에 있는 변수..

    [Unity] Debug 클래스 (에디터 출력용)

    유니티 스크립트에서는 게임을 제작하는 동안 디버깅을 도와주기 위해 Debug 클래스를 제공한다. - Debug.Log() Debug.Log() 메소드는 괄호 () 안에 로그 메시지를 넣어주면, 유니티 콘솔창에 로그 메시지를 출력해주는 메소드이다. - Debug.LogError() Debug.LogError() 메소드는 괄호 () 안에 로그 메시지를 넣어주면, 유니티 콘솔창에 로그와 함께 에러 메시지를 표시한다. - Debug.LogWarning() Debug.LogWarning() 메소드는 괄호 () 안에 로그 메시지를 넣어주면, 유니티 콘솔창에 로그와 함께 경고 메시지를 표시한다. 출처 : https://m.blog.naver.com/PostView.naver?blogId=nuberus&logNo=50..

    [Unity] 스크립트 파일

    스크립트 파일은 C#으로만 되어있고 C++하고는 다르게 .cs 파일들로만 구성 되어있다. 생성 방법은 총 두 가지가 있다. Assets 메뉴 > Create > C# Script 적당한 곳 우클릭 > Create > C# Script 게임 오브젝트에서 Add Component 클릭 후 스크립트 명칭 적으면 된다 생성하면 아래와 같이 생성 된다. 게임 오브젝트에 적당히 드래그해서 호출하면 된다.

    [Unreal] csv 파일 불러온 후 읽어들이기

    불러오기 우선 .csv 파일을 준비한다. 빈 클래스가 생성 될텐데 싹 지워버린다. .csv 파일을 연동시키기 위해선 데이터 테이블이 필요하다 FTableRowBase 로부터 상속받은 구조체를 하나 생성한다. #include "Engine/DataTable.h" 및 "파일명.generated.h" 추가 USTRUCT(BlueprintType) 와 GENERATED_BODY() 메크로 필히 추가 #pragma once #include "CoreMinimal.h" #include "Engine/DataTable.h" #include "Test.generated.h" USTRUCT(BlueprintType) struct FsTestData : public FTableRowBase { GENERATED_BODY(..

    [Unreal] 자료구조 순회 방법

    TMap 변수명; Key = 키, Value = 값 범위 기반 for문 사용 구현, . 멤버 변수 접근자 사용 예) 변수명.Key, 변수명.Value for (auto 변수명 : TMap 변수명) { } 이터레이터 사용 구현, it-> 화살표 연산자 참조 또는 (*it) 역참조로 접근 예) it->Key, (*it).Value 주의) TConstIterator 형이지만 != 연산자는 nullptr과 비교 불가다. ++ 연산자는 파라미터를 봐서는 전위 연산자인데 후위 연산자는 복사 오버헤드로 인해 막아놓은듯 하다. for (auto it = TMap 변수명.CreateConstIterator(); it; ++it) { }

    [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 // 직접 변환 없음 // 손실 위..