[TIL] Unity - 오브젝트 이동

MINO·2024년 6월 3일
post-thumbnail

2024-06-03


오브젝트 이동

오브젝트 이동 방법에는 2가지가 있다.

  • Rigidbody 로 힘을 가해서 움직이는 방법
  • Transform 에 접근하여 position 을 이동해주는 방법

TIL 주제 이유

새로운 팀 프로젝트 PPAP 를 시작하며, 마구잡이로 움직이는 자동차를 구현하게 되었다.

자동차의 상태는 4가지로

  • Idle : 직진만 하는 상태
  • Random : 플레이어를 발견한 후, 무작위 방향으로 돌진하는 상태
  • Chasing : 플레이어를 발견한 후, 플레이어 방향으로 돌진하는 상태
  • Crashing : 충돌하거나 시간이 지나, 자동차가 곧 사라질 상태

브레인 스토밍

  1. 자동차 오브젝트는 다른 건물, 자동차, 플레이어 등과 충돌해야 함
    • rigidbody 와 collider 필요
  2. 자동차가 플레이어를 일정 범위 안에서 탐지해야 함
    • Trigger 용도 collider 필요
  3. 자동차 속력이 일정하지 않고, 점점 빨라지면 좋을 것 같음
    • rigidbody 와 AddForce 필요
  4. 자동차가 충돌하거나 방향을 변경하면, Rotation 도 변경돼야 함
    • Rotation 필요 (상황에 따라 Quaternion 도 필요)

rigidbody.AddForce()

AddForce 의 4가지 모드

  • ForceMode.Force : 무게 적용 , 가속
  • ForceMode.Accelration : 무게 적용 X , 가속
  • ForceMode.Impulse : 무게 적용 , 순간적인 힘 부여
  • ForceMode.VelocityChange : 무게 적용 X , 순간적인 힘 부여

자동차의 크기마다 가속되는 정도를 다르게 해주고 싶어 Force 모드를 사용할 것이다.


Lerp()

앞서 포스팅에서 다뤘던 선형 보간 함수다.

상황에 따라 적절히 사용할 수 있다.

Vector3.Lerp(orgV, targetV, t);
Quaternion.Lerp(orgRot, targetRot, t);
Mathf.Lerp(a, b, t);

문제점

rigidbody 방식으로 접근해보다가 보간치를 설정하는 데 어려움이 있어,
transform.position 방식으로 접근해보았다.

자동차가 적절히 움직이고 회전하지만, 다른 오브젝트에 충돌했을 때,
물리 충돌 연산이 안 일어나서 rigidbody 에 어쩔 수 없이 접근해야 했다.

코드를 갈아엎고 다시 rigidbody 방식으로 접근하는 중이다.


TIL 마무리

코드 짜는 속도가 느린건지, 아이디어를 구체화하는 속도가 느린건지
기능 하나를 구현하는 데 너무 많은 시간이 소요되는 것 같아 스트레스다.

profile
안녕하세요 게임 개발하는 MINO 입니다.

0개의 댓글