Unreal (316) 썸네일형 리스트형 Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 6-25 AI 컨트롤러 생성하고 설정하기현재 적 역할을 위해 세워둔 캐릭터는 아무런 동작없이 가만히 서있기만 한다.생동감 넘치는 적을 표현하기 위해서 AI 기능을 부여할 필요가 있으며, 이번 강의에서 AI 작업을 위한 기본적인 세팅 작업을 복습하게 된다. 먼저 AIController C++ 클래스를 생성하자. 그리고 해당 AIController를 기반으로 한 블루프린트 또한 생성해주자. 그리고 해당 블루프린트 AIController를 우리가 사용할 폰의 디폴트 AIController 클래스로 할당해주자. 이제 플레이를하고 아웃라이너에서 해당 AIController가 검색되는 모습을 볼 수 있다. Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 6-24 이제 사망 애니메이션을 실제 게임플레이랑 연결해보자.전에 선언했던 bool 타입 변수인 Is Dead을 통해 사망 여부를 판별하기 위해 VScode에서 사망 여부를 판별하고 리턴해주는 블루프린트로 노출 가능한 함수를 작성해줄 필요가 있다. 블루프린트에 노출시키기 위해서는 UFUNCTION을 작성해주면 되고, 안에 내용은 BlueprintPure를 작성해주었다.BlueprintPure의 의미는, C++의 const와 유사하지만 더 강력한 의미로 간단하게는 실행핀이 없는 함수를 뜻한다.더 자세히 말하자면 실팽 핀이 없는 함수는 보통 호출하는 대상에 아무 영향을 끼치지 않고 결과만 받는 다는 것을 뜻한다. 예시로 속도를 얻기 위해 사용했던 Get Velcoity 함수 등이 있다.해당 함수 자체는 단지 속도만 .. Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 6-23 불리언 값에 따른 애니메이션 블렌딩무사히 캐릭터가 데미지를 받지만, 체력이 0이 되었음에도 똑같은 모습을 보인다.따라서 체력이 0이 되면 죽게 되는 애니메이션 모션을 추가해보자. 죽는 애니메이션 모션을 추가하기에 앞서서, 우리는 죽었는지 아닌지 체크할 bool 타입 변수가 하나 필요하다.그리고 해당 bool 타입 변수의 값에 따라서 애니메이션을 블렌딩하게 된다.이를 블렌딩해주는 함수는 Blend Poses by bool 함수이다.그리고 죽는 애니메이션도 AnimGraph로 끌어와야 하는데, Death_Forward 애니메이션을 선택하였다. 그리고 Death_Forwar에 대해서는 죽었을 때 한번만 실행되어야 하므로, Loop 옵션을 꺼주었다. 이제 bool 타입 변수 값에 따라 변해야 하므로, 해당 bo.. Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 6-22 TakeDamage 함수 오버라이드하기이번에 액터에 데미지를 입히게 되는데, ACtor의 TakeDamage 가상 함수 오버라이드를 통해서 구현해보게 된다.먼저 해당 함수의 원형을 캐릭터 클래스에 선언해주자. 그리고 캐릭터의 최대 체력과 현재 체력을 표시할 변수를 선언해주자. 게임이 시작할 때 현재 체력을 최대 체력으로 설정해주자. 이제 선언했던 TakeDamage 함수를 구현해보자.Super를 통해서 부모 함수의 기능을 가져오고, 리턴값인 적용 데미지 값이 float 값이기에 해당 변수를 선언해서 리턴값을 받아주자. 이후 해당 값을 토대로 현재 체력에서 값을 감소시켜주면 된다.체력이 음수로 가면 안되기에 만약 데미지 수치가 현재 체력보다 높다면 Min 함수를 통해서 더 작은 값을 데미지로 정하여 체력이.. Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 6-21 C++ 가상 함수이번에는 잠시 C++ 가상 함수에 대해 알아본다.VScode에서 BeginPlay 함수나 Tick 함수에 virtual과 overide 표시가 붙은 것을 봤을 것이다.이러한 것이 가상 함수를 나타내며, 이번에 이에 대해 더 자세히 알아보는 과정을 가진다.기본적으로 가상메소드는 베이스 클래스에 있는 함수를 오버라이드한다. 먼저 강의에서 사용한 예제를 그대로 캡처해보았다.다음 코드의 결과를 추측해보자. 단순하게 생각해보면 Gun타입 포인터 변수에 대해 한번은 Gun 클래스에 대한 주소접근을, 한번은 Pistol에 대한 주소접근을 해서 할당하였으므로, Gun에 대한 Shoot 함수와 Pistol에 대한 Shoot 함수가 호출된다고 생각할 수 있다.하지만 결과는 오버라이드 되지 않고, 모두 Gu.. Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 6-20 액터에 데미지 입히기우리가 만든 총알은 데미지를 입혀야 한다.따라서 이번엔 액터에 데미지를 입히는 방법을 구현해보자.먼저 데미지를 입는 대상이 있어야 하므로, 우리가 만든 캐릭터를 월드에 배치해주자. 다음으로 총알의 데미지를 미리 설정해주자.일단은 10으로 설정을 하였다. 이제 데미지 이벤트를 사용해야 하는데, 먼저 관련 헤더파일을 선언해주자. 데미지 이벤트에 대한 것은 2가지로 FRadialDamage와 FPointDamage이다. FRadialDamage 데미지는 방사형과 같은 데미지를 의미하며, 수류탄 같은 것이 해당될 것이다. FPointDamage 데미지는 단일 데미지를 의미하며, 총알과 같은 것이 해당되기에 우리가 사용할 데미지 이벤트이다. 먼저 우리는 히트된 액터에 대해 알 필요가 있다.만약.. Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 6-19 임팩트 효과이제 히트한 위치에 임팩트 효과를 생성해보자.이를 위해 파티클 시스템을 위한 변수를 또 생성해주어야 한다. 이번엔 SpawnEmitterAtLocation 함수를 통해 임팩트를 히트한 위치에 소환해보자.UWorld 값과 파티클 시스템, 히트한 위치, 회전 값을 받게 된다.여기서 회전 값에 대해서만 다소 주의할 필요가 있는데, 필요한 것은 총알이 어느 방향에서 오는 가이다.따라서 발사 방향인 Rotation.Vector()에 -을 붙여준 방향을 할당하게 된다. 이후 언리얼에서 파티클을 할당하고 플레이 해보자. 히트한 위치에도 이제 파티클 이펙트가 있는 것을 볼 수 있다. Unreal Engine 5 - C++ 개발자: C++ 학습하고 비디오 게임 제작하기 Section 6-18 라인 트레이싱 By Channel이제 얻은 위치와 회전 을 토대로 라인트레이스를 해볼 차례이다.이를 위해 프로젝트 세팅에서 총알에 대한 트레이스 채널을 생성해주자. 트레이스 채널외에도 오브젝트 채널이 존재하는데,오브젝트 채널은 말그대로 오브젝트 자체에 채널을 달 수 있도록 해주는 것이고 트레이스 채널은 트레이스 라인에 따라 반응을 어떻게 할 지 정하게 되는 것이다. 채널을 만들고 아래 Preset을 통해 기본적인 세팅을 설정할 수 있다. 해당 타입을 더블 클릭하면 위와 같이 프로필이 나오고, 각 트레이스 타입과 오브젝트 타입에 대해 어떻게 반응할 건지 체크하는 것이 가능하다.총알 트레이스 채널을 만들 때 기본적으로 모든 것에 대해 Blocked 되도록 하였기에 여기서 몇 가지 간단하게 설정을 바꿔준다.N.. 이전 1 ··· 17 18 19 20 21 22 23 ··· 40 다음