목록UE5_Tutorial1 (11)
그냥 게임개발자
일상 C++에서 사용하는 컨테이너와 조금 차이가 있다. 물론 C++의 컨테이너를 이용해서 만들어도 되지만 추후에 크래쉬가 발생할 수 있다고 한다. ex) vector, map, unordered_map 그래서 이 것을 언리얼 엔진에서 제공해주는 컨테이너가 따로 있다. vector ➜ TArray C++ vector에서는 vector.Empty()라는 함수로 존재하는지 체크하는 함수가 있는데, 언리얼에서는 TArray.Empty()라는 함수는 TArray 안에 있는 내용을 비우겠다라는 함수이다. 즉 vector.clear()랑 같은 동작을 한다. 정의는 같은데 동작이 다르니 헷갈릴 수 있는 점 참고하길 바란다. unorderd_map ➜ TMap (map은 Tree기반이고, unorderd_map은 has..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b8Am9t/btsv8e8vCj1/qtHD0z3g2wVsB6iNAlIhok/img.png)
1. BehaviorTree Service 2. BehaviorTree Decorator 3. AIAttack 일단 필자가 만든 BehaviorTree를 먼저 설명하겠다. 일단 저번 글과는 좀 다르게 무언가가 많이 추가가 되었다. 이 BehaviorTree를 먼저 설명하기 전 Composite, Service, Decorator를 먼저 설명하겠다. Composite 컴포짓은 상태들의 시작점이다. 상태가 복귀와 실행 플로우에서 어떻게 행동해야하는지 정의한다. Selector, Sequence, Simple Parallel 세가지 종류가 있다. Service Service는 연결된 Composite이 활성화 되어있는 한 계속해서 구동된다. 속성에서 설정한 간격에 따라 Tick이 일어난다. 서비스는 항상 호출..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bbFTIF/btswasEZ91T/D3568EUDmKrWPGknPKr4Uk/img.png)
1. Blackboard, BehaviorTree 생성 2. AIController ➡ BehaviorTree로 구현 1. Blackboard, BehaviorTree 생성 그 다음 AI가 이동할 Pos를 담을 Vector키를 생성하자. 필자는 키 이름을 "PatrolPos"라고 지정했다. 2. AIController ➡ BehaviorTree로 구현 우리는 MyAIController에서 BlackBoard와 BehaviorTree라는 변수를 만들어서 생성해줄 것이다. MyAIController.h UPROPERTY() class UBehaviorTree* BehaviorTree; UPROPERTY() class UBlackboardData* BlackBoardData; MyAIController.cpp..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Ekb5I/btsv5oRqfPr/ou07w3j9ukz69youqkzNZK/img.png)
1. AI 컨트롤러 생성 2. NavMesh 3. AI 이동 1. AI Controller 생성 일단 AI를 만들려면 AIController를 생성해야한다. 그 다음 우리는 프로젝트 빌드(프로젝트명.Build.cs) 파일에 3가지를 추가해줘야 한다. PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "UMG", "NavigationSystem", "AIModule", "GamePlayTasks"}); 이것을 해줘야 한다. 2. NavMesh NavMeshVolume을 생성해서 AI가 갈 수 있는 길을 구워주자. P 버튼을 누르면 초록색으로 어디로 이동할 수 있는지 나온다. 스케일은..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bvl4Dk/btswBFbRqAP/h5BVwt3wNqZRtxOMN3dXrk/img.png)
본 강의는 인프런 루키스 강의를 보고 작성한 글인점을 알려드립니다. 1. UI 만들기 2. 캐릭터에 UI 적용 1. UI 만들기 우리는 이제 캐릭터의 HpBar라는 UI를 만들 예정이다. UI 폴더를 만들어서 관리를 하도록 하자. 처음에는 아래와 같이 그냥 빈 것이지만 우리는 캔버스라는 패널을 추가해줄 것이다. 왼쪽에 캔버스 패널을 드래그앤 드롭을 해보자. 이렇게 추가가 된 것을 볼 수가 있는데 우측 상단에 스크린 사이즈를 커스텀으로 설정해놓고 Width : 200, Hegiht : 50으로 설정해주도록 하자. 이제 우리는 ProgressBar를 넣어주도록 하자. 그다음 우리는 ProgressBar 사이즈를 대충 설정해주도록하자. 이제 우리는 이 Widget을 C++에 상속시켜서 사용할 것이다. 이제 우..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bPt5fi/btsvVKlCKQ2/1lcHpXkxaBVGjbxgciKKt0/img.png)
본 강의는 인프런 루키스 강의를 보고 작성한 글인점을 알려드립니다. 1. 아이템 줍기 2. 스탯 매니저 MyWeapon이라는 클래스를 만들어보자. 일단 MyWeapon에 필요한 함수는 PostInitializeComponents(), OnCharacterOverlap() 필요한 변수는 UStaticMeshComponent(Weapon), UBoxComponent(Trigger)이렇게 4가지다. 그럼 코드를 짜보자. protected: virtual void PostInitializeComponents() override; private: UFUNCTION() void OnCharacterOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, U..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bqlwut/btsvYS3ZCM2/0fCQbZQ7sNoP98aBjPAXT1/img.png)
본 강의는 인프런 루키스 강의를 보고 작성한 글인점을 알려드립니다. 1. 애니메이션 몽타주 2. 콤보 공격 ProjectSettings에 Input값을 설정하자. 1. 애니메이션 몽타주 콤보 공격에 사용할 애니메이션을 만들기 위해 애니메이션 몽타주를 만든다. 이런 화면이 만들어질 것인데 이 캐릭터는 공격 애니메이션이 4개나 있어서 4개의 콤보 공격을 만들어보자. 드래그를 해서 애니메이션들을 넣어보자. 일단 우리는 몽타주 섹션을 구분별로 나누어 볼 것이다. 이런 식으로 Montage(DefaultGroup) 라인에 오른쪽 버튼을 클릭을 해서 몽타주 섹션을 4개정도 추가해줬다. 이름은 그냥 Attack0 ~ 4까지 해주었다. 이 때 번호의 순서는 맞춰주도록 하자. 우리가 나중에 Index로 이용하기 때문이다..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bxsBle/btsvDkmsK9V/qxpEyBUCetl2GpBvgxZMM1/img.png)
본 강의는 인프런 루키스 강의를 보고 작성한 글인점을 알려드립니다. 1. 캐릭터 생성 2. GameModeBase C++로 만들기 3. 애니메이션 1. 캐릭터 생성 우리는 저번에 1인칭 플레이어 캐릭터를 생성해보았다. 모르시는 분들은 -> https://sudoju.tistory.com/54 이번에는 3인칭 플레이어 캐릭터를 생성해보려고 한다. 우리는 캐릭터 모델이 따로 없기에 마켓플레이스에서 에픽게임즈가 무료로 제공하는 파라곤 캐릭터를 이용할 것이다. 아주 좋은 캐릭터들이 많다 마음에 드는 것을 다운받아 프로젝트에 추가하자. 이제 우리는 저번에 만들었던 PlayerCharacter클래스를 버리고 TutorialCharacter라는 클래스를 만들어서 관리할 것이다. 만약 또 오류가 난다면 cpp파일에 ...