실습 과제를 만들다가 회전 파트에서 막혔다.
회전 부분의 개념과 활용법을 더 정확하게 알아둬야할 것 같아 정리해둔다.
이번에 구현하다 막힌건 원형으로 투사체 발사하는 것이었다.
결과적으로 위의 그림 방향대로 투사체가 나와야한다.
이것저것 시도를 많이했었는데 남은 게 2개밖에 없다.
float rotate = 360f / count;
for (int i = 0; i < count; i++)
{
transform.Rotate(Vector3.up, rotate * i);
Debug.DrawRay(transform.position, transform.forward, Color.green, 3f);
}
원형이긴한데 예상했던 대로 안나와서 새로 짜야했다.
뿐만 아니라, 본체를 직접 움직이는 방법이라서 좋은 시도는 아니었다.
float rotateAmount = 360f / countOfProjectile;
for (int i = 0; i < countOfProjectile; i++)
{
Projectile projectile = pool.Get();
Vector3 dir = Quaternion.Euler(0f, rotateAmount * i, 0f) * equipParent.forward;
projectile.Rigidbody.useGravity = false;
projectile.Fire(firePoint, dir * data.speed);
}
벡터를 이용한 쿼터니언 회전으로
새로 작성하고 이상한 건 없었고 바로 테스트했다.
근데 결과물은 좀 많이 이상하게 나왔다.
이 시도에서 뭔가 이상한 걸 느끼고 테스트용으로 빈 씬을 만들었다.
시도 1에서는 계산을 잘못해서 엎었는데,
시도 2에서부터는 다른 문제도 있을 수 있겠다고 생각했다.
그리고 로직은 동일한 코드로 새로 시도해봤고,
void CircularDrawing()
{
float rotate = 360f / count;
for (int i = 0; i < count; i++)
{
Vector3 dir = Quaternion.Euler(0f, rotate * i, 0f) * transform.forward;
Debug.DrawRay(transform.position, dir, Color.green, 3f);
}
}
예상한대로 출력됐다.
계산이 잘못된 게 아니었다.
그러면 뭐가 문제였나면 투사체들의 생성 위치와 투사체들에 붙은 콜라이더들이었다.
투사체들이 한 점에서 바로 생성되고, 각각 콜라이더와 RigidBody가 달려있으니
시작하자마자 바로 부딪히는 것이 원인이었다.
투사체의 충돌을 trigger 방식으로 변경하고 나니 정상적으로 작동했다.
#내일배움캠프 #스파르타내일배움캠프 #스파르타내일배움캠프TIL