2024-06-03

오브젝트 이동
오브젝트 이동 방법에는 2가지가 있다.
- Rigidbody 로 힘을 가해서 움직이는 방법
- Transform 에 접근하여 position 을 이동해주는 방법
TIL 주제 이유
새로운 팀 프로젝트 PPAP 를 시작하며, 마구잡이로 움직이는 자동차를 구현하게 되었다.
자동차의 상태는 4가지로
- Idle : 직진만 하는 상태
- Random : 플레이어를 발견한 후, 무작위 방향으로 돌진하는 상태
- Chasing : 플레이어를 발견한 후, 플레이어 방향으로 돌진하는 상태
- Crashing : 충돌하거나 시간이 지나, 자동차가 곧 사라질 상태
브레인 스토밍
- 자동차 오브젝트는 다른 건물, 자동차, 플레이어 등과 충돌해야 함
- 자동차가 플레이어를 일정 범위 안에서 탐지해야 함
- 자동차 속력이 일정하지 않고, 점점 빨라지면 좋을 것 같음
- 자동차가 충돌하거나 방향을 변경하면, 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 마무리
코드 짜는 속도가 느린건지, 아이디어를 구체화하는 속도가 느린건지
기능 하나를 구현하는 데 너무 많은 시간이 소요되는 것 같아 스트레스다.