반응형
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함수 만 보시면 될거같네요
이상 유도탄 만들기 였습니다.
반응형
'유니티 > 프로그래밍' 카테고리의 다른 글
[Unity] Physics.SyncRigidbodyTransfom 부하시 해결 (0) | 2019.12.06 |
---|---|
[Unity] 3D 공 계속튕기게 하기 (0) | 2019.10.17 |
[Unity] Physics.OverlapCapsule 함수 사용법 (1) | 2019.09.19 |
[Unity] 오브젝트마다 중력값 다르게 하기 (1) | 2019.09.18 |
[Unity] Quaternion.Lerp (회전보간) 이 끝났는지 확인하기 (1) | 2019.07.17 |