언리얼엔진/언리얼 C++ 39

Behavior Tree (Task, Service, Decorator) - C++

※ 개인적인 공부를 위해 포스팅 하는 글입니다. # 테스크, 서비스, 디코레이터를 C++로 만들어 보자ㆍ 이런식으로 상속을 받는 C++를 테스크, 데코, 서비스를 파주자.  # 모듈을 추가해 주자 # 서비스ㆍ Tick을 이용해서 만든 서비스 블루프린트 버전이였다. 이걸 C++로 옮기면..ㆍ 설명이 필요없게 직관적이다. TickNode같은 경우는 f12로 타고들어가서 찾아줫다ㆍ 이런 여러가지 옵션들을 생성자에서 설정해 줄 수 있다. ㆍ 변수명같은 경우엔 보통 에디터를 영어로 하고 보면 동일하긴 하다.void UBTService_FindTarget::TickNode(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, float DeltaSeconds){ Super..

Behavior Tree (Task, Service, Decorator) - BP

※ 개인적인 공부를 위해 포스팅 하는 글입니다.# AI를 구성하기 위해선ㆍ 블랙보드, AI Controller, Behavior Tree가 필요하다. # 블랙보드ㆍ 칠판처럼, 뇌처럼 즉 AI에서 필요한 변수들을 저장하는...  # AI컨트롤러에서 간단하게 불러오기. 코드로도 쉽게 고칠 수 있겠다.   # Behavior Treeㆍ 만들고 블랙보드를 바인드 해주고 #여러가지 노드들ㆍ 기존에 알고있던거라 자세한 포스팅은 생략. 기억 안나면 주석을 보자 ▶ 테스크 노드ㆍ 새 태스크 노드를 만들어 정의할 수 있는데. 이걸 C++로 할 수 있다.ㆍ 실제 행동에 관련된 노드들, 일감 느낌 # 테스크 노드 블루프린트ㆍ 일단 저기서 Execute AI 이벤트를 찾아서 눌러주자.※ 흐름을 간단하게 보자면..ㆍ Locat..

데미지 처리와 애니메이션 노티파이

※ 개인적인 공부를 위해 포스팅 하는 글입니다. # 데미지 처리는 반드시 피해를 받는 클래스에서.ㆍ 데미지처리 같은 경우에는 피해자쪽에서 처리하는 편이 깔끔하다.ㆍ 만약 가해자 쪽에서 처리를 하면 pvp게임 같은 경우, 가해자가 5분간 독뎀을 적용시켰다고 가정해보자. 근데 걸자마자 나갔다, 그럼 그 독은 어떻게 되는거지???, 이런 고민들을 피해자에서 처리하면 안해도 된다.ㆍ 가해자.... 아니면 중간에서 관리를 해주는 클래스..? 그런것 보단 그냥 피해자쪽에서 코드를 처리해 주는 편이 깔끔하다.그냥 테스트를 위해 간단하게 캐릭터 클래스에서 이렇게 변수를 선언해주자 ㆍ 국룰 함수도 정의해 주자. 현재는 캐릭터 클래스기 때문에 가상함수로 정의하였다, 지금은 그냥 테스트를 위한 간단한 클래스니까 캐릭터 클래..

(충돌)마우스 하이라이트와 추적과 공격

※ 개인적인 공부를 위해 포스팅 하는 글입니다.# 적으로 쓸 임시 엑터 생성지금은 에디터에서 그냥 클릭 해본 상태인데. 인게임에서도 마우스 커서를 가져다 올렸을 때 해당 기능이 되길 원한다.ㆍ 인터페이스를 상속받는 클래스를 하나 만들어준다.ㆍ 다중상속은 C++에서 지원은 하나 별로 권장하진 않는다.. 하지만 인터페이스로 추상적으로 되어있는 클래스는 다중상속을 받아 구현해도 별 문제가 없다.ㆍ 해당기능은 몬스터든 플레이어든 둘 다 작동되길 원하느 그냥 캐릭터 클래스에서 상속을 받아서 구현부를 작성해줬다.ㆍ 뭐 일단은 별거없이 bool로 분기점만 나눠둔 상태 #R1PlayerControllerㆍ 컨트롤에 관련된 것들은 PlayerController 클래스에서 해주고 있으니 거기에 해당 변수를 추가해 줬다.ㆍ..

(충돌) C++에서 충돌과 델리게이트

※ 개인적인 공부를 위해 포스팅 하는 글입니다. #충돌ㆍ 간단하게 누군가와 오버랩이 감지되면 충돌이 감지되는거... C++에서 보자 #누가 들고있을까? ㆍ 당연히 Player의 캡슐 컴포넌트로 접근을 해야겠다.  캐릭터로 만들었으니 캡슐 컴포넌트는 있겠다ㆍ CollisionEnabled를 설정해주고BeginPlay에서 이렇게 정의해 주자, 타고타고 들어가보면Signature.. 매개변수를 참고하기위에 한번 더타고 가자ㆍ 이런 델리게이트 하나를 발견할 수 있다. 이걸 일단 복사해보자.ㆍ 매개변수를 OverlappedComponent부터 싹 긁어왔다. 쉼표는 좀 제거해줬고,반드시 UFUNCTION() 을 붙혀줘야 리플렉션 시스템 적용된다.ㆍ 이렇게 함수 바인드 해주면 준비가 다됐다. ※ 블프에선 이벤트 C+..

(충돌) 프리셋과 트레이스

※ 개인적인 공부를 위해 포스팅 하는 글입니다. # Collision 체널 관리-  프로젝트 세팅 -> 콜리전ㆍ 객체 하나하나마다 충돌을 따로 설정해주면,, 너무 귀찮고 비효율적이겠다. 그래서 체널로 관리 해 줄 수 있다고 했다. # 해보자ㆍ 아래 Preset부분에 Env가 추가되었는데... 설정이 안돼있다. 체널을 파 줬으면 한번은 노가다 해줘야 된다.   #트레이스 체널ㆍ 물체와 물체의 충돌은 아닌데,, 레이저를쏘건 범위판정을 하건 영역에 판정을 할건데 그것과 어떻게 할거야? 라는 느낌기본 정의되어있는걸 보면 바로 감이 잡힌다ㆍ 아~ 아마 롤 우물밖으로 커서찍으면 우물안으로 찍히는 그런느낌인듯? 체널을 추가하면.. ㆍ 해당경로 해당 파일에 이렇게 체널로 추가된걸 볼 수 있다. 나중에 C++에서 접근하..

충돌의 기초

※ 개인적인 공부를 위해 포스팅 하는 글입니다. #충돌그냥 액터하나 만들어보자. 다양한 옵션들이 있다.ㆍ 사실 이것도 충돌이다. 마우스 위치를 레이케스트로 쏘는방식  # 콜리전의 종류Query Onlyㆍ 쉽게 말해 "충돌" 그 자체만 처리하는거. 물리적인 연산같은건 신경쓰지 않고 시뮬레이션 하지도 않고, 겹쳤냐? 안겹쳤냐? 만 판단할때 사용하면 유용할 것 같은 느낌이다. ㆍ 오버랩, 레이케스트, 스윕 등등에 쓰는것 (물리 시뮬레이션이 없는 충돌방식)ㆍ 시뮬레이션 트리에 데이터가 들어가 있지 않아, 시뮬레이션을 하지 않을거면 성능이 더 좋다.ㆍ 스윕이 뭔지 몰랐었는데, 쉽게 예를 들면 빗자루를 쓸다가 중간에 뭐가 막힌경우 턱!! 하고 멈추겠다 느낌이라 스윕이라 한다. Physics Onlyㆍ 뭐 반대로 물..

애니메이션 템플릿과 Top-Down 뷰 컨트롤러

※ 개인적인 공부를 위해 포스팅 하는 글입니다.# 애니베이션 템플릿ㆍ 다양한 애니메이션을 묶어서 정의할 수 있는 인터페이스 느낌의 템플릿ㆍ 템플릿 내에선 구조를 잡아주고, 실제 재생 부분은 추상적으로만 저렇게 구현해 놓으면 된다.ㆍ 그림과 같이 생성해주고, 애니메이션을 지정해주면 간단하게 끝!  # Top - Downㆍ 기본 컨텐츠에 있는 커서를 이주해서 가져왔다. ㆍ Input과 관련된 매핑과, 데이터를 탑다운 뷰에 맞게 수정해주고 #AR1PlayerController.hㆍ 임시로 위치값을 저장할 캐쉬데이터와, 클릭했을때 시간, 등 필요한걸 정의.  ㆍ 키를 위와같이 배정해줬다. 같은 키를 바탕으로 어떻게 동작할지 다르게 정의됨ㆍ빌드 잘 되는데 빨간줄은 안사라지네;;ㆍ Player 에서 해당옵션을 켜주..