Make Unreal REAL.
article thumbnail
INI 설정과 에셋 지연 로딩

이득우의 언리얼 C++ 게임 개발의 정석 우선 ABCharacterSetting 클래스는 ArenaBattleSetting 모듈에 생성된 언리얼 오브젝트이므로 CoreMiminal.h를 ArenaBattleSetting.h로 변경한다. 언리얼 엔진은 언리얼 오브젝트의 기본값을 유연하게 관리하도록 외부 INI 파일에서 기본 속성 값을 가져오는 기능을 제공한다. INI 파일에서 기본값을 불러들이기 위해서는 UCLASS 매크로에 config 키워드와 설정 이름을 추가해야 한다. 프로젝트의 Config/Default{설정 이름}.ini 파일을 참조한다. 애셋은 가상 경로만 알면 프로그램에서 로딩할 수 있다. INI에서 불러들인 가상 경로는 FSoftObjectPath라는 클래스로 저장된다. FSoftObject..

article thumbnail
프로젝트 정리와 모듈 추가

이득우의 언리얼 C++ 게임 개발의 정석 C++ 코드가 있는 폴더에서 Public 폴더를 생성 후 모든 헤더 파일을 옮긴다. Private 폴더를 생성 후 모든 소스 코드 파일을 옮긴다. C++ 코드가 있던 폴더에는 {프로젝트명}.Build.cs 파일만 남게 된다. VS 파일을 재생성해 준다. 솔루션을 열면 구조가 변경된 것을 확인할 수 있다. 컴파일 후 언리얼 에디터를 켜면 이 곳에서도 구조가 변경된 것을 볼 수 있다. Public 폴더만 보이는 이유는 Private 폴더에는 헤더 파일이 없기 때문이다. 언리얼 에디터는 헤더 파일을 기준으로 C++ 클래스를 표시한다. Public, Private 폴더를 나눈 후부터는 새로운 C++ 클래스를 생성할 때 언리얼 에디터가 알아서 두 폴더에 헤더 파일과 소스 ..

article thumbnail
Behavior Tree로 공격하기

이득우의 언리얼 C++ 게임 개발의 정석 행동 트리의 추적 분기에서 공격 기능을 추가하기 위해 셀럭터와 시퀀스를 추가하고 아래와 같이 변경한다. 이번에는 블랙보드 데코레이터를 사용하지 않고 플레이어가 공격 범위 내에 있는지 판단하는 데코레이터를 직접 만들어보도록 한다. 새로운 클래스를 생성했으니 CoreMinimal.h를 ArenaBattle.h로 변경한다. 데코레이터 클래스는 CalculateRawConditionValue() 함수를 실행시켜 조건을 확인한다. 이 함수는 const로 선언되어 클래스의 멤버 변수 값을 변경할 수 없다. 필요한 헤더를 포함한다. 생성자에서 데코레이터 이름을 설정한다. 행동 트리를 실행 중인 ControllingPawn과 블랙보드 키에 저장된 플레이어 Target의 거리가 ..

article thumbnail
Behavior Tree로 추격하기

이득우의 언리얼 C++ 게임 개발의 정석 추격 시 플레이어를 저장할 Object 타입의 Target 블랙보드 키를 추가한다. 플레이어를 저장할 것이므로 Base Class를 ABCharacter로 지정한다. Class와 Object 타입의 블랙보드 키는 Base Class를 설정할 수 있다. 지정해 주는 것이 좋긴 하지만 어차피 나중에 UObject* 에서 Base Class* 형식으로 캐스팅해 사용해야 하긴 마찬가지다. 클래스를 선택할 때 파란색으로 표시되는 클래스는 액터 클래스이다. ABAIController 클래스에 Target 블랙보드 키의 이름을 저장하는 변수를 선언한다. 서비스 독립적으로 동작하지 않고 컴포짓에 부착되는 노드다. 컴포짓에 속한 태스크들이 실행되는 동안 반복적인 작업을 실행하는 ..

article thumbnail
Behavior Tree로 이동시키기

이득우의 언리얼 C++ 게임 개발의 정석 행동 트리(Behavior Tree) AI가 해야 할 행동을 분석하고 우선순위가 높은 행동부터 실행하도록 트리 구조로 설계하는 기법이다. 블랙보드(Blackboard) AI가 행동을 결정하는 데 사용할 변수(데이터)를 모아 놓은 집합이다. 새로운 행동 트리와 블랙보드를 만든다. 행동 트리를 열면 루트 노드가 보인다. 행동 트리에서 하나의 동작을 나타내는 단위를 (태스크)Task라고 한다. 태스크는 독립적으로 실행될 수 없고 반드시 컴포짓(Composite) 노드를 겨쳐 실행되어야 한다. 대표적인 컴포짓으로는 시퀀스(Sequence)와 셀렉터(Selector)가 있다. 시퀀스를 1개 추가하고 하위에 Wait 태스크를 1개 추가한다. 시퀀스는 하위 태스크들의 결과가 ..

article thumbnail
AI 컨트롤러로 이동시키기

이득우의 언리얼 C++ 게임 개발의 정석 AI 컨트롤러(AI Controller)는 플레이어 컨트롤러와 동일한 방식으로 폰에 빙의할 수 있다. 새로운 AI 컨트롤러를 만든다. 새로운 클래스를 생성했으니 CoreMinimal.h를 ArenaBattle.h로 변경한다. 캐릭터 클래스에 AI 컨트롤러를 설정하기 위해 헤더를 포함한다. AI 컨트롤러 클래스를 AABAIController 클래스로 지정한다. AutoPossessAI 옵션은 다음과 같다. EAutoPossessAI::Disabled 자동으로 빙의하지 않는다. EAutoPossessAI::PlacedInWorld 폰이 이미 월드에 배치되어 있는 경우에만 빙의한다. EAutoPossessAI::Spawned 폰이 새로 Spawn 되는 경우에만 빙의한다..

검색 태그