반응형

3D 유도탄만들기.

 

벡터 내적외적 이용해서 할려고 하는데 적용하기에는 시간이 걸려서 

이번 포스트에는 타겟 방향벡터 가지고 유도탄 만들기를 하겠습니다.

 

추후에 이 포스트에 벡터 내적외적 이용해서 구현한 방법도 추가해서 올릴게요~

 

 

 

우선 구현 움짤입니다

 

6개 로켓이 한방향으로 나가는 유도탄(유도체는 앞쪽에 회색기둥)

 

 

 

 

 

 

구현 코드내용입니다

private float dis;
private float speed;
private float waitTime;
public Transform TargetTr;


void Start()
{
   dis = Vector3.Distance(Tr.position, TargetTr.position);
   
   //포탄생성후 초반에 포탄이 벌어지듯이 연출하기위해
   //포탄의 회전을 캐릭터위치에서 포탄의 위치의 방향으로 놓습니다
   transform.rotation = Quaternion.LookRotation(transform.position - 캐릭터의위치);

}


void Update()
{
	DiffusionMissile_Move_Operation();
}

void DiffusionMissile_Move_Operation()
    {
        if (TargetTr == null) return;

        
        waitTime += Time.deltaTime;
        //1.5초 동안 천천히 forward 방향으로 전진합니다
        if (waitTime < 1.5f)
        {
            speed = Time.deltaTime;
            transform.Translate(Tr.forward * speed, Space.World);
        }
        else
        {
        // 1.5초 이후 타겟방향으로 lerp위치이동 합니다

            speed += Time.deltaTime;
            float t = speed / dis;

            Tr.position = Vector3.LerpUnclamped(Tr.position, TargetTr.position,  t   );

        }


		// 매프레임마다 타겟방향으로 포탄이 방향을바꿉니다
        //타겟위치 - 포탄위치 = 포탄이 타겟한테서의 방향
        Vector3 directionVec = TargetTr.position - Tr.position;
        Quaternion qua = Quaternion.LookRotation(directionVec);
        Tr.rotation = Quaternion.Slerp(Tr.rotation, qua, Time.deltaTime * 2f);
        


    }

 

포탄생성시 위치값은 랜덤으로 해줬습니다.

이후에 transform.rotation = Quaternion.LookRotation(transform.position - 캐릭터의위치); 에서

각 포탄의 방향을 공작날개같이 펼치듯이 하기 위해 방향을 변경합니다.

 

경과시간 1.5초 전 까지는 공작날개같이 펼쳐 놓도록한 포탄의 방향에서 forward 방향으로 전진 시켜줍니다.

 

경과시간 1.5이후에는 타겟으로 위치이동을합니다.

 

매프레임마다 포탄의 방향은 타겟방향으로 향하게 Slerp 처리 해줍니다.

 

위 유도탄 만들기 코드 중 DiffusionMissile_Move_Operation함수 만 보시면 될거같네요 

 

이상 유도탄 만들기 였습니다.

반응형

+ Recent posts