🎮Unreal4/Blueprint 47

[UE4] 에임 오프셋 (1D/상하), 시야각 제한

🎯 에임 오프셋 (1D, 상하) 에임 오프셋은 기준 애니메이션을 가지고, 기준 애니메이션을 가지고 위를 보는 동작, 밑을 보는 동작을 만든다. 에임 오프셋을 이용하면 캐릭터가 마우스 또는 컨트롤러 방향으로 무기를 조준할 수 있도록 포즈의 블렌딩 기능을 사용할 수 있다. 에임 오프셋은 블렌드 스페이스와 매우 유사하지만, 차이점은 분명 존재한다. 블렌드 스페이스는 자기 자신이 시작하는 애니메이션의 값이 되는 반면, 에임 오프셋은 들어오는 애니메이션을 배치한 기준 애니메이션들과 섞어준다. 애니메이션 블루프린트에 에임 오프셋을 배치해보면 블렌드 스페이스와 다르게 입력 포즈가 있다. 베이스 포즈로 들어온 동작과 에임 오프셋에 설정된 동작이 섞이면서 최종적인 애니메이션을 출력하게 된다. 에임 오프셋의 Pitch 값..

[UE4] 가비지 컬렉션, Pending Kill, 활 쏘기, Get Attach Parent Actor, DetachFromActor

🪣 가비지 컬렉션 (GC, Garbage Collection), Pending Kill 블루프린트에서 Destroy Actor 함수를 호출하여 어느 객체를 지우면 해당 객체가 바로 사라지는 것 같지만, 사실은 바로 지워지지 않는다. 언리얼에는 메모리 관리기법으로 "가비지 컬렉션"을 사용한다. 가비지 컬렉터라는 쓰레기 수집기가 링크가 끊어진 부분을 찾아서 링크가 끊어진 상태(=Pending Kill, 킬 대기)라면 해당 객체를 지우는 과정이 내포되어 있다. 즉, 오브젝트나 컴포넌트가 Destory되면 씬 상에서 제거된 것으로 보이지만, 메모리 상에서는 Pending Kill 상태가 되어 다음 GC(Garbage Collection) 실행 시 메모리에서 해제되는 것이다. C++ 코드 상에서 유효성을 검사할 ..

[UE4] 애니메이션 Layer, 링크된 애님 레이어

💃 애니메이션 Layer 애니메이션 디자이너는 Layer를 이용해서 애니메이션을 합치는 등 다양한 기능을 구현하지만, 나는 간단히 레이어를 이용한 구역 나누기를 수행해보았다. 애니메이션 블루프린트에서 기본적인 행동(Locomotion)을 담는 레이어와, 화살 공격 기능(Bow Layer)을 담는 레이어를 추가해주었다. 위와 같이 두 레이어를 모두 생성하고 배치하였으면 AnimGraph에서 해당 레이어들을 불러올 수 있다. 링크된 애님 레이어 함수를 이용하여 디테일 패널에서 연결할 Layer를 선택할 수 있고 위와 같이 애님 그래프에서 배치하여 기능이 다른 포즈의 애니메이션들의 구역을 분리해줄 수 있다.

[UE4] ProjectileMovement (FireBall 던지기 공격)

🚀 ProjectileMovement (발사체 무브먼트 컴포넌트) Projectile Movement 컴포넌트는 루트 액터에 존재하는 충돌체를 움직이고 싶은 경우 사용할 수 있다. (충돌체만 움직일 수 있다.) 언리얼 문서에서는 Tick 이벤트가 호출되는 동안 다른 컴포넌트의 위치를 업데이트해주어 충돌 후 튕김이나 미사일같은 작동 방식을 구현할 수 있다고 적혀있다. 주로 해당 컴포넌트가 움직이는 충돌체는 소유 액터의 루트 구성요소이지만 다른 구성요소를 선택할수도 있다. 컴포넌트의 많은 기능 중 사용할법한 몇 기능만 설명하겠다. Projectile - Initial Speed : 최초 속도 - Max Speed : 가속 시킬 경우 최대 속도 (가속이 없다면 0) - Projectile Gravity Sca..

[UE4] Around Attack 기능(FireBall, IceBall), Rotate Vector Around Axis

🔥 Around Attack 기능 마법사의 공격 기능 중 플레이어의 주위(Around)를 원형으로 돌면서 FireBall 또는 IceBall을 띄워 공격하는 기능을 만들어보았다. ❄️ Ball의 회전 Tick 이벤트를 호출하여 플레이어 주면을 회전하는 Ball의 각도를 계속 증가시켜주었다. 방향의 음값을 가리키는 Negative(bool형) 변수가 False이면 시계방향으로 회전하고, True이면 반시계방향으로 회전하도록 구현하였다. Tick 호출마다 Speed 변수에 Deta Time을 곱하고 Angle값을 더하여 매 프레임마다 각도가 더해지거나, 음의 값이라면 감산되도록 구현하였다. ❗지속적인 각도 증가/증감 시 유의사항 앵글을 계속 감산/가산하며 시간이 지나면 각도가 360도 혹은 -360도를 지나..

[UE4] 순간이동 구현 시 나타나는 문제점 (Get Scaled Capsule Half Height, 블로킹 볼륨)

💥 순간이동 구현 시 나타나는 문제점 - 1 🔹플레이어의 몸통이 땅에 박힌다 마법사의 순간이동 기능을 구현하고 나서 가끔씩 순간이동 시 플레이어의 몸통 절반이 땅에 박힐때가 있다. 이는 플레이어의 중심점이 허리에 위치했는데, 순간이동하려는 땅의 z좌표가 플레이어의 중심점 z좌표보다 아래로 내려가는 순간 중심점이 땅의 z좌표에 맞춰져 허리가 박힌것처럼 보인다. 일반적으로 중심점이 땅보다 살짝 위에있으면 충돌체가 자동으로 땅위에 올려서 크기를 맞춰 배치하여 정상적인 출력이 가능한데, 어쩌다 중심점이 땅보다 밑에 한번 찍히는 경우 버그가 발생하게 된다. 이를 해결하는 방법은, 단순히 중심점 만큼 플레이어의 위치를 땅위로 올려주면 된다. X, Y 좌표는 그대로 사용하면 되고 높낮이 조절인 Z값만 다시 조절해주면..

[UE4] Decal(데칼), 커서(Cursor) 이미지 3D 월드에 출력, Get Hit Result Under Cursor by Channel, SetWorldLocationAndRotation, RotationFromXVector

마법사의 순간이동 기능을 구현하던 도중, 어느 지점으로 순간이동 해야할지 마우스 커서를 출력하는 기능을 구현해보았다. 🎨 Decal (데칼) Decal은 화면 공간에 텍스처를 그릴 수 있도록 도와주는 컴포넌트이다. 예를 들어 마법진이나, 문신같이 게임 속에 그림/이미지를 그려야하는 경우 사용된다. 언리얼 문서에서는 레벨의 메시에 투영되는 머티리얼로, 스태틱 메시나 스켈레탈 메시 등에 투영되는 컴포넌트를 말한다고 쓰여있다. 나는 플레이어의 순간이동 지점을 표시할 마법진을 그리기 위해 Decal 컴포넌트를 추가하였고, 바닥에 출력하기 위해 트랜스폼을 적절하게 조절하였다. 이후 디테일 패널에서 Decal 카테고리의 Decal Material 항목에 출력할 머티리얼을 설정해주었다. 나는 M_Cursor라는 쉐이..

[UE4] Enemy에서 카메라 쉐이크 구현

기본적으로 게임에 카메라는 플레이어에게만 달려있지만, Enemy 클래스에서도 카메라 쉐이크를 발동시킬 순 있다. 공격하는 애니메이션에 Camera Shake 노티파이를 삽입한다고 하면, 해당 노티파이는 플레이어에서 실행될 수도, Enemy에서 실행될 수도 있다. 따라서 두 경우 모두 카메라 쉐이크가 발동될 수 있는 블루프린트를 작성하였다. 카메라 쉐이크에 쓰이는 카메라는 PlayerController 안에 Player Camera Manager에 존재한다. 해당 객체까지 도달해야 Start Camera Shake 함수를 사용할 수있다. Actor의 Get Owner -> Character 형변환 -> Get Controller -> PlayerController 형변환 -> Player Camera Ma..

[UE4] 검기 효과 (Trail 노티파이 스테이트, Particle Effect 노티파이)

🔥 검기 효과 🚩 Trail 노티파이 스테이트 해머 무기를 사용할 때 해머를 휘두르는 순간 검기 이펙트가 나오도록 검기 효과를 구현해보았다. 먼저, 공격 애니메이션의 몽타주를 생성하고 해머를 휘두르는 구간동안 검기 노티파이를 생성하였다. 이때 생성되는 검기 노티파이의 이름은 "Trail"이다. 노티파이 트랙의 알맞은 구간에 Trail 노티파이 스테이트를 추가하여 해머가 상대를 향해 휘두르는 구간을 지정하여 설정해주었다. Hammer Start Hammer End 이때 검기가 그려질 시작과 끝 부분을 지정해주어야 하는데, 해당 위치는 플레이어의 Mesh에 위치한 Bone에 소켓을 추가해주었다. 소켓 추가가 끝나면 Trail 노티파이 스테이트를 클릭하여 디테일 창에서 출력할 검기 효과와, First Sock..

[UE4] 콜리전 중복 충돌 문제, 공격 중 전방의 Target에게 카메라 고정/회전, 가장 전방에 있는 액터 찾기 함수 작성

💥 콜리전 중복 충돌 문제 Enemy를 공격할 때 Enemy에 존재하는 캡슐 콜리전에 플레이어의 무기가 여러번 충돌되는 문제가 발생하였다. Component Begin Overlap 함수를 호출하여 충돌을 체크하는데 무기를 휘두르는 시간이 길다면 여러번 충돌이 체크될 수 있다. 따라서 이를 해결하기 위해 무기가 상속받는 Weapon_Combo 클래스에서 공격하는 대상들을 저장하는 Character형 배열 변수 Hitted를 생성하였다. 무기와 Overlap 충돌되는 Character 액터들을 모두 Hitted에 저장하는데, 이때 AddUnique 함수를 사용하여 중복되지 않는 캐릭터 액터들만 저장하는것이 핵심이다! 결과적으로 충돌되는 액터들을 중복없이 배열에 담기 때문에 여러번 충돌이 체크되어 공격하는 ..

728x90