어제와 이어서 모작해보자.
오늘 이어서 구현할 기능은 아래와 같다.
자세한 개발 내용은 하단의 개발 로그를 참고하자.
(2) : https://velog.io/@suhan0304/Unity-Knife-Hit-2
velocity가 단순히 오브젝트의 속도를 조절한다고 한다면 angularVelocity는 오브젝트의 회전 속도를 조절해주는 메서드이다.
float randomTorque = Random.Range(-200f, 200f);
rb.angularVelocity = randomTorque;
OnCollisionEnter과 다르게 Trigger는 충돌 지점을 정확히 Vector 값으로 얻어 올 수 없다. (OnCollision이 충돌 지점을 얻어오는 방법은 아래와 같다.)
private void OnCollisionEnter2D(Collision2D collision)
{
// 충돌한 모든 접촉점(contact point)을 가져옴
foreach (ContactPoint2D contact in collision.contacts)
{
Vector2 collisionPoint = contact.point;
Debug.Log("Collision Point: " + collisionPoint);
}
}
그래서 OnTriggerEnter의 경우 두 Collider의 중심을 찾아서 평균 값을 찾거나 Closest Point 메서드 사용을 통해 충돌 지점을 어느 정도 계산 해주어야한다. (정확하지는 않다.)
Vector2 collisionPoint = collision.bounds.ClosestPoint(transform.position);
collision.bounds.ClosestPoint는 현재 Collider2D의 경계(bound)에서 주어진 위치(transform.position)에 가장 가까운 지점을 반환한다.