Unreal Engine 5 – Full Course for Beginners
https://www.youtube.com/watch?v=6UlU_FsicK8
타이머라는 것을 설정했고, 해당 Time이 지난 후,
들어있는 Function Name에 해당하는 함수를 실행한다.
이 때, Looping을 키면, Time이 지났다가 실행하기를 반복한다.
iniailize함수는 이전에 만든 컨트롤러 초기화 노드들을 함수로 묶어서 사용한다. 여기서 중요한건, 마지막에 Get timer invalid를 넣어 주어서 timer를 멈춰주어야 loop를 막을 수 있다고 한다.
그냥 delay를 걸지 왜 timer를 쓰는가 하면,
매우 세부적인 100마이크로초까지 정밀하게 세기 때문에 사용한다고 한다.
delay는 정확하지 않기 떄문에
보통 정확한 시간을 원하거나, 함수의 Loop 기능이 필요하다면,
timer중에서도 timer by function을 주로 사용한다고 한다.
최종 수정
이전에 액션매핑을 Jump를 두었었는데,
지금은 Interact를 추가하려고 한다.
w키를 눌러야지 동작하는 함수와, 직접 설정한 Interact 사용자 액션과 비슷하다.
해당 F라는 것에 Interact라는 이름을 지어준 꼴이다.
이전에 공 2개 객체의 BP에, Event Overlap으로
충돌시 HA출력하고, pawn객체면 DIDIDI이런걸 출력하라고 작성했는데,
해당 객체마다 충돌을 감지하기보다, 플레이어 하나만 감지하도록 하는것이 효율적이라고 한다.
아래처럼 간단한 기능을 하도록 했었다.
overlap을 통해, 충돌한 객체가, pawn으로 cast(형변환)가 되면,
DIDIDI를 출력하는 원리였다.
똑같이, Character에서도, 아래와 같이 만들 수 있다.
이 때, 해당 부딪힌 객체를 SET으로 BPPickup형으로 받아서
NearPickup으로 저장하였다.
그리고, end overlap이라는 이벤트기능으로, 겹쳐있다가 겹치지 않게 된다면,
그리고 겹쳤던 것이 Pickup객체였는데, 거기에 NearPickup 변수와 값까지 같았다면,
실제로 가까이 있었다가 떨어진 상황이 되므로,
SET을 하는데, 파란핀으로 값을 받아오는 것 없이 그냥 SET을 하여,
참조가 없는 Null값으로 NearPickup을 초기화한다.
interact키를 눌렀고, get으로 가져온 NearPickup이 유효한 값을 가지고 있다면,
해당 NearPickup이 참조한 객체를 Destroy하라는 기능이다.
닿아있는 상태로, F키를 누를시 사라지는 모습이다.
정상동작하고, 2개도 가능하다.
정상동작하지만, 부자연스러운 부분이 있다고 하는데,
아래처럼 겹쳐있다면, 박스가 없어지고, 새로운 collision 이벤트가 발생하지 않기 떄문에
나머지를 없앨 수가 없다는 말이다.
하지만 실제로는 없앨 수 있었다.
해당 문제에 대한 해결책은, Destroy후에, 본인과 겹치는 actor를
가져와서 set으로 NearPickup의 값을 수정하는 것이다.
즉 2가지 방식이 있는 것이다. [참고자료]
추가로 구조체 핀 분할을 하여 transform값을 직접 입력할 수도 있다.
또 새로운 Actor BP를 만든다.
Actor를 만들었던 그대로 다시한다.
static mesh component를 루트노드와 교체한다.
그리고 콜리젼도 추가한다.
피직스 시뮬레이트도 킨다.
impulse라는 힘을 가하는 작업을 추가한다. 유니티의 Force impulse 이런건가보다.
그리고 아래와 같이 BP를 만들면,
해당 객체를 가지고 와서 유효한지 판단 후에,
Actor인 character의 정면 방향벡터에 1000000배의 힘을 곱하여
날려버린다.
멀리 날아가는 모습
해당 기능을 끄면, collision이 보이게 된다.
필요시 끌 것
가장 많이 쓰이는 기능 중 하나가 Raycasting이다.
언리얼엔진에서는 Linetrace라고 부른다.
Linetrace에서 가장 많이 쓰이는 것은,
Line Trace By Channel
과 Multi Line Trace By Channel
이다.
전자는 line이 감지하는 제일 첫번째 값만 받아오는거고,
후자는 모든 값을 받아온다.
linetrace는 다음과 같이 생겼다.
start좌표부터, end좌표까지 선을 잇는다.
그 선상에 부딪히는 것을 Out Hit으로 리턴값을 얻는다.
Trace Channel을 통해 특정 채널만 감지하도록 할 수도 있다.
위에서 보면, 현재 체널이 visiblity로 설정이 되어있는데,
해당 캐릭터의 mesh-detail-collision에 보면,
콜리전 프리셋에서 visibiity라는 탭이 있다.
해당 것에서 뭘 하라고 하는데 영어 설명이 이해가 안된다.
일단 스킵
추가로 초록핀 Draw line으로 디버그용으로 선을 볼 수가 있다
왼쪽 마우스 버튼을 누르면, 시작인 카메라 위치부터,
카메라 위치에 카메라 정면으로 500000cm 곱하고 더한 값까지 선을 그리는 line을 그리게 된다.
문제없이 동작하지만, 보통 게임은 1인칭카메라와 3인칭카메라로 2개가 존재한다.
그래서 다음과 같은 카메라 인덱스방식을 사용하고, camera노드 자리만 교체하면 된다.
혹은 그냥 Actor라는 루트기반 기능을 가진 함수로 변환없이 사용할 수 있다.
아래와 같이 Hit된 Actor만 추출하여 사용할 수 있다.