UE4 57

[UE4] 상태패턴으로 캐릭터 효율적 관리 구상해보기

언리얼에서 여러가지 다양한 애니메이션(스킬, 달리기, 구르기, 점프공격, 점프, 공격, 피격, idle, 죽음)을 연결하다보니 AnimBlueprint의 StateMachine을 사용하게 되었고, 캐릭터의 다양한 상태를 코드적으로 구현해 관리하면 애니메이션이나 다른 부분을 구현할때에도 도움이 되지 않을까 생각해서 구상해보기로 했다. 1. 순수가상클래스 State 정의하기. 먼저, 상태를 정의하는 State Class를 작성한다. // State.h #pragma once class AMyCharacter; class State { public: virtual ~State() {} virtual void Enter(AMyCharacter* Character) {} virtual void Update(AMy..

UE4 2023.04.05
[UE4] 클래스 이름 변경하는 방법

1. 바꾸고자 하는 클래스의 헤더파일로 이동한 후, 첫 알파벳을 제외한 클래스 이름을 선택한다. - 예를 들어 위의 경우는 저렇게 U를 뺀 나머지 클래스 이름을 선택하면 된다. 2. Ctrl + H를 누른다. 그럼 우측 상단에 팝업이 하나 뜰것이다. 3. 새로운 이름을 아래 캡처와 같이 하단 박스에 작성한다. 4. 변경 영역을 현재 프로젝트로 지정하고 오른쪽에 있는 버튼을 눌러주면 된다. 5. 솔루션 탐색기의 클래스 네이밍은 F2를 눌러 직접 변경해주자. 6. 컴파일 에러가 없는지 확인한 후 프로젝트를 닫고 uproject파일을 우클릭해 Generate Visual Studio를 해주면 끝! 출처 : https://cynthis-programming-life.tistory.com/entry/Ue4-Cha..

UE4 2023.04.05
[UE4] UIOnly InputMode에서 Key Input 허용하는 방법

언리얼에서는 인풋모드를 클래스로 만들어 관리하고 있는데 자주 쓰이는 인풋모드는 크게 3가지가 있다. 1. UI에만 인풋 전달. 2. 게임에만 인풋 전달. 3. 둘다에 인풋 전달. 서론 인벤토리를 만드는 중에 괜히 욕심이 생겨 특정 키를 누르면 현재 화면에 떠있는 팝업 ui 가 하나씩 지워지는 기능을 만들었는데 1번 모드를 사용하니 키 인풋이 먹히지 않았다. 열심히 배열이랑 함수들 만들어가며 추가한 기능인지라 이대로 버리긴 아까워서 구글링을 통해 해결하고자 한다. 참고로 3번을 쓰면 되지 않냐 싶은데 그렇게 했다가 인벤토리 클릭하는데 플레이어가 같이 공격해버리는 버그가 발생했다. 플레이어가 UI 밖 게임과 상호 작용하게 하고 싶지 않다면, 또는 키보드를 사용하여 UI와 상호작용 하고 싶다면 주목하자. 해결..

UE4 2023.03.31
[UE4] MSB 3073 오류 해결법

위의 오류는 대체로 다른 에러와 함께 발생한다. 하지만 이번에 처음으로 혼자 에러를 발생시켜 새벽 3시까지 구글링을 했다. 코딩을 하면서 어떤 오류가 발생했을 때 내잘못이 아니라 컴퓨터가 이상해 엔진이 이상해 생각하기 마련인데, 그런 생각은 진작 접는것이 좋다. 나보다 천만배는 더 똑똑한 사람들이 만든게 오류가 쉽게 날리 없다. 반드시 마지막으로 잘 실행했던 빌드 이후로 내가 코드 혹은 엔진에 무슨 똥을 싸질러놨는지 기억을 되돌려보자. 해결법 언리얼에서 저 오류만 단독으로 발생했다면 높은 확률로 UPROPERTY 와 같은 언리얼에서 만든 것들과 관련된 오류이다. 그래서 컴파일러 오류로 뜨지 않고 저 오류만 단독 발생한 것이다. 그렇다면 컴파일러에서도 알려주지 않는 오류를 광활한 코드들 속에서 어떻게 찾아..

UE4 2023.03.29
[UE4] 아키타입(Archetype)

언리얼 Document를 보다보면 아키타입이라는 말이 자주 나오는데 구글링을 해도 많은 자료가 나오진 않아서 오늘은 아키타입이란 무엇인지 알아보고자 한다. 일단 사전에 Archetype의 단어 뜻에 대해 검색해보았다. 우리나라말로는 "전형"이라고 떠서 의미가 확 와닿진 않았는데 영어 해석을 보면 "A perfect example of something"이라고 쓰여져있다. 무언가의 틀? 원형?과 같은 의미로 쓰이는 것 같다. 언리얼에서 Archetype에 대해 정의한 문서는 존재하지 않았지만, 이 아키타입이라는 말이 제일 많이 나오는 부분인 UPROPERTY의 속성 지정자에 대한 Documents를 통해 단서를 얻을 수 있었다. - EditAnywhere : 에디터 내의 속성 창, 아키타입 및 인스턴스를 ..

UE4 2023.03.02
[UE4] 인터페이스 (Interface)

What is "Interface"? 인터페이스(interface)란 특정 기능을 구현할 것을 약속한 추상 형식을 말합니다. Java나 C#등 다른 객체지향 언어에서는 인터페이스 형식을 제공하지만 C++언어에서는 제공하지 않습니다. 하지만 순수 가상 메서드를 이용하여 정의할 수 있습니다. 인터페이스는 멤버필드나 구체적으로 구현한 메서드를 갖지 않고 특정 기능을 약속한 메서드만 갖습니다. 그리고 모든 멤버는 사용하는 개발자와의 약속으로 public 접근 지정합니다. C++에서는 구조체는 디폴트 가시성이 public이어서 구조체를 이용하여 인터페이스를 정의하는 이들도 많습니다. 인터페이스 명명규칙 개발자들 사이에 인터페이스 이름은 I로 시작하고 뒤에 약속하는 기능을 붙입니다. 물론 여러 개의 기능을 약속하는..

UE4 2023.02.25
[UE4] 스마트 포인터 (Smart Pointer)

언리얼 스마트 포인터 라이브러리는 메모리 할당과 추적의 부담을 해소해주도록 설계된 C++11 스마트 포인터들의 커스텀 구현입니다. 이 구현에는 업계 표준인 Shared Pointers(공유포인터), Weak Pointers(약 포인터), Unique Pointers(유니크 포인터)가 포함되어 있습니다. 또한 null이 불가능한 Non-Nullable Shared Pointer와 같은 역할을 하는 Shared References 도 추가되었습니다. 단, 언리얼 오브젝트는 게임 코드에 더 최적화된 별도의 메모리 추적 시스템을 사용하기 때문에 이러한 클래스들은 "UObject"시스템에는 사용할 수 없습니다. SmartPointer Type 스마트 포인터들은 갖고 있거나 참조하는 오브젝트의 생명 주기에 영향을 ..

UE4 2023.02.24
[UE4] Projectile Movement Component

What is ProjectileMovementComponent? ProjectileMovementComponent를 앞으로 PMC라고 칭하겠습니다. PMC는 tick이 돌아가는 동안에 다른 컴포넌트의 위치를 업데이트해주는 컴포넌트입니다. 충격이 가해진 이후 바운스되는 부분이나 특정 타겟을 향해 유도미사일처럼 이동하는 기능 등을 지원합니다. 보통 움직이는 컴포넌트는 PMC를 소유하고 있는 액터의 루트 컴포넌트이지만, 다른 컴포넌트를 선택할 수도 있습니다. (SetUpdatedComponent()를 사용하세요.) 만약 업데이트되는 컴포넌트가 물리를 시뮬레이팅중이라면(Simulating Physics), 오직 Initial launch parameters(발사 초기화 인자들) 만이 발사체(projectile..

UE4 2023.02.14
[UE4] 게임플레이 프레임워크

플레이중인 게임의 정보를 처리하는 클래스는 크게 GameMode와 GameState 둘로 나뉘어진다. GameMode 게임 프레임워크의 바탕은 GameMode이다. GameMode에서는 게임의 규칙을 설정한다. 플레이어 스폰 처리도 담당한다. 보통 플레이 도중 자주 바뀌는 데이터는 없어야 하며, 서버에만 존재하므로 클라이언트에서 알아야 하는 휘발성 데이터는 절대 넣어선 안된다. 가장 제약이 없다는 게임일지라도 토대가 되는 규칙들이 존재하며, 이러한 규칙들이 게임모드를 이룬다. 가장 기본적인 수준에서 간단하게 예를들어 보자면 다음과같다. - 존재하는 플레이어와 관람자의 수, 허용된 플레이어와 관람자의 최대 인원. - 플레이어가 게임에 들어오는 방식, 스폰 위치 선택 규칙과 기타 스폰/리스폰 동작 포함 가능..

UE4 2023.01.18