본문 바로가기

언리얼엔진

(71)
[C++] 프로젝트 생성 / 클래스 추가 및 삭제 / Root Component 추가 지금까지 언리얼엔진 블루프린트를 사용했고, 이번에는 C++로 사용해볼 것이다. Tip!! * 언리얼 프로젝트 압축할 때, Config, Content, Source, UE4 실행파일 4가지만 압축하면 된다. 언리얼 C++ 프로젝트 살펴보기 먼저 새 프로젝트 생성한다. 지난번과 다른 점은 C++ 프로젝트로 생성하는 것이다. * 프로젝트 경로 생성 시, 한글이 포함되지 않도록 주의하는 것이 좋다. ※ 프로젝트 생성 오류 발생 만약 프로젝트 생성 시 아래와 같이 오류 발생 메세지가 뜨면서 .NET Framework SDK 설치를 하라고 한다면 dotnet.microsoft 페이지로 가서 .Net Framework에서 4.6.0 이상의 버전 아무거나 설치해주면 된다. Visual Studio 버전 설정하기 이어..
55. 카메라 쉐이킹 / 데이터, 스트링 테이블 * 만약 레벨에서 맵의 크기를 수정했다면, 네비게이션 빌드 경로를 한번 다시 해주자. (AI의 이동에 문제 발생 여지가 있음) * 정현 == Sine 카메라 쉐이킹(흔들림) 구현하기 MatineeCameraShake 우클릭 - 블루프린트 클래스 - 모든 클래스 : MatineeCameraShake 추가하기(CamShake) CamShake 내부의 디테일을 살펴보자. * Oscillation : 진동 - Duration : 기간 - Blend In / Out Time : 서서히 자연스럽게 진동이 강해지 고 약해지는 시간 - Rot / Loc : 회전 / 이동 진동 - FOV : 시야각 Rot Oscillation(회전 진동)은 활용하기 좀 애매하다. 우선 Oscillation Duration(진동시간)은 ..
54. 인바이런먼트 쿼리(2) - Target 뒤로 텔레포트 하기 인바이런먼트 쿼리의 Dot 테스트를 통해 Enemy의 뒤로 갈 수록 아이템의 Score 커지기 먼저 Point : Grid Generators를 추가하여 Grid 우클릭 - 테스트 추가를 통해 Dot 테스트를 추가하였다. 그리고 Dot 테스트를 통해 Enemy의 후방으로 갈수록 아이템의 Score 값이 점점 커지도록 할 것이다. 첫번째 Line A는 Querier의 Rotation을 통해 첫번째 벡터로 삼는다. 두번째 Line B는 Querier에서 Item으로 가는 두번째 벡터로 삼는다. Test Mode는 평면 상에서의 거리만 볼 것이기 때문에 Dot 2D(x,y 좌표)로 선택했다. * Absolute Value : 결과값이 모두 절대값 Fliter Type으로는 Maximum을 선택하였는데, 이는 ..
53. 인바이런먼트 쿼리 Enemy AI가 텔레포트 사용하도록 하기 인바이런먼트 쿼리(환경 질의) 콘텐츠 브라우저에서 우클릭 - 인공 지능 - 인바이런먼트 쿼리(EQS_Example)를 사용해볼 것이다. 주변 상황에 대해서 AI가 파악하기 위한 수단 중 하나이다. EQS_Example 내부에서 Points:Grid를 추가한다. * Run EQS Query 태스크 그리고 BT_Enemy_Ranged 비헤이비어 트리에 와서 Run EQSQuery 태스크를 추가한다. 이 태스크에서 Node탭과 블랙보드의 DEPRECATED로 되어있는 항목들은 모두 폐기된 것이므로 사용하지 않는다. 그리고 Query Template에 아까 만든 EQS_Example 인바이런먼트 쿼리를 선택해준다. 이후 비헤이비어 트리에 연결했던 Sequence들을 모..
52. Tag 활용법 / AI Teleport 구현(Is At Location / 컴포짓) Tag를 통해 아군 / 적 구분하는 방법 먼저 BTS_FindTarget의 ReceiveSearchStartAI 이벤트를 함수로 변환하였다. Actor Has Tag를 통한 구분 AI로 감지된 대상들을 For Each Loop with Break로 하나씩 확인해주는데, Array Element를 로컬 변수로 승격하여 TargetNew를 하나 만든다. 그리고 원소 하나하나에 Tag A가 있는지 검사하고 있다면 TargetNew에 넣고, Loop가 끝나면 기존 Target변수에 TargetNew 값을 Set Blackboard Value as Object를 통해 넣어준다. 직접 감지된 대상의 Tag를 검사하여 구분 BP_Player / BP_Enemy에 먼저 Tag를 Team / A or B 순서대로 2개씩..
51. 원거리 공격 Enemy AI 만들기 원거리 공격 Enemy 생성 원거리 공격을 하는 Enemy를 만들기 위해 BP_Enemy를 상속하여 BP_Enemy_Ranged 자손 블루프린트를 만들었다. BP_Enemy_Ranged에게 적용할 비헤이비어 트리 BT_Enemy_Ranged도 새로 추가한다. BB_EnemyRanged 블랙보드 먼저 비헤이비어 트리에 사용할 블랙보드 BB_Enemy_Ranged를 만들어서 Blackboard Asset에 적용하였다. BB_Enemy_Ranged 블랙보드 디테일에서 전에 만들었던 BB_Enemy_Melee 블랙보드를 부모로 설정하였다. 이렇게 블랙보드를 설정하면 BB_Enemy_Melee에 추가했던 Target과 SelfActor 키를 쓸 수 있게 되는 것이다. BT_Enemy_Ranged 비헤이비어 트리 ..
50. PatrolRoute로 정찰 / 개곡선, 폐곡선 Enemy가 PatrolRoute 따라서 이동하기 BP_PatrolRoute에서 추가한 스플라인 포인트들의 위치를 받아와서 BP_Enemy가 해당 경로로 이동하도록 한다. 먼저 BP_PatrolComponent에서 Get Destination 함수를 추가했다. Get Destination 함수 PatrolRoute 변수가 유효한지 검사를 먼저 한다. 만약 유효하지 않다면 그대로 반환하며 함수가 끝나게 되고, 유효하다면 PatrolRoute 안에 있을 Spline에서 Get Location at Spline Point로 각각의 SplinePoint 마다의 Location을 반환하도록 한다. Point Index는 변수로 승격하여 변수(Index)로 만든 뒤, Index의 값을 증가 / 감소 시키면서 Spl..
49. AI Move & Attack / Spline을 통한 정찰 Enemy의 대상 추격 / 공격 구현하기 저번 시간에는 AIPerception 컴포넌트를 통해서 인식된 대상을 BT_Enemy_Melee 비헤이비어 트리에서 받기까지 했다. 이번에는 인식한 대상을 추격하여 일정 거리 좁혀지면 공격하도록 해보았다. 제일 처음 Selector의 서비스(BTS_FindTarget)을 통해서 Target키에 값을 받아오고, 다음 데코레이터(Blackboard Based Condition)에서 Target키의 유효성을 검사한다. Target키가 지정됬다면 Selector로 흘러가고, 아니라면 Wait 태스크로 계속 넘어간다. 다음으로 데코레이터(BTD_IsArmed)로 현재 Enemy의 장비 상태를 확인하는데, 데코레이터의 bCompareTo변수값과 CharacterInterfa..