새로운 3D 에셋을 가져와 원하는 장애물을 만들어보기

칼든개구리·2024년 12월 21일
0

[언리얼TO리얼]

목록 보기
40/42


강의에서 배운대로 이렇게 Tick 함수에서 매 프레임마다 addActorRotation을 사용해서 z축 기준으로 회전시키는데 이게 로컬 기준이라 z축을 기준으로 제자리에서 빙글빙글 돈다. 위에 setWorldLocation에서 이미 큐브를 radius 방향 만큼 떨어진 위치로 이동시켰기 때문에 큐브는 원 궤도를 따라 움직이는 원리로 움직인다!

오늘 저 과제를 하면서 동일한 코드를 사용했는데 제자리에서만 빙글빙글 도는 것이었다!. 물론 Radius 값을 500으로 수정하고 Speed도 10정도 주었다.
흠 그러면 sin과 cos을 사용해서 수정하는 방법이 남아있다.


Tick 함수를 위주로 구현을 시작했다.
1. delta seconds와 speed를 상용하여 angle값 업데이트

  • delta seconds: 현재 프레임과 이전 프레임 사이의 시간 차이
  • speed: 궤도를 도는 속도
  • 두 값을 곱하여 이번 프레임 동안 증가할 각도를 계산한다
  • add 노드를 사용하여 기존 angle 값에 이 증가 각도를 더한다.

2 angle 값 정규화

  • angle 값이 계속 증가하면 불필요하게 커질 수 있기 때문에 이를 제한한다.
  • 6.28318(2 π) 값을 사용하여 fmod 연산을 수행하여 angle값을 6.28318(2 π) 로 정규화 한다
    - 이렇게 진행하면 cos 및 sin 계산이 안정적이다

3 x,y 좌표 계산

  • 정규화된 angle 값을 사용해 cos(x좌표), sin(y좌표)를 계산한다.
  • 계산된 cos와 sin 값에 radius를 곱하여 객체의 궤도 상의 x,y 값을 결정한다.
    -radius: 중심으로부터 거리
    -X: cos(angle) radius
    -Y: sin(angle)
    radius

4 z 좌표 유지

  • GetActorLocation 노드를 사용해 현재 액터의 z값ㅇ르 가져온다
  • X,Y 값은 궤도를 따라 움직이도록 계산되었으므로 Z값은 기존 높이를 유지한다.

5 MakeVector로 새 위치 생성

  • 계산된 X,Y,Z값을 사용하여 새로운 위치 백터 생성한다
    -X: cos radius
    -Y: sin
    radius
    -Z: 기존 값

6 SetActorLocation으로 객체 위치 업데이트

  • SetActorLocation노드에 MakeVector의 결과를 연결해 객체를 새 위치로 이동시킨다.


profile
메타쏭이

0개의 댓글