내일배움캠프 42일차 TIL : 회전

김정환·2024년 11월 12일
0

키워드

  • 회전 관련 트러블슈팅

실습 과제를 만들다가 회전 파트에서 막혔다.
회전 부분의 개념과 활용법을 더 정확하게 알아둬야할 것 같아 정리해둔다.

이번에 구현하다 막힌건 원형으로 투사체 발사하는 것이었다.

결과적으로 위의 그림 방향대로 투사체가 나와야한다.
이것저것 시도를 많이했었는데 남은 게 2개밖에 없다.

시도 1 (사파 버전)

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);
}


원형이긴한데 예상했던 대로 안나와서 새로 짜야했다.
뿐만 아니라, 본체를 직접 움직이는 방법이라서 좋은 시도는 아니었다.

시도 2

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

profile
사파 개발자

0개의 댓글