65 lines
2.3 KiB
C#
65 lines
2.3 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class Projectile_UpAndChase : ProjectileBase
|
|
{
|
|
private float dis;
|
|
private float upspeed = 4f, speed;
|
|
private float waitTime;
|
|
private Vector3 randomPos; // 랜덤하게 이동할 위치
|
|
private Vector3 startPos;
|
|
private bool hasReachedRandomPos = false; // 랜덤 위치에 도착했는지 여부
|
|
Transform TargetTr;
|
|
|
|
public override void Set(ProjectileData _data)
|
|
{
|
|
base.Set(_data);
|
|
hasReachedRandomPos = false;
|
|
speed = waitTime = 0f;
|
|
transform.position = startPos = _data.v3_StartPos;
|
|
randomPos = startPos + Random.insideUnitSphere * 1f + Vector3.up * 2f;
|
|
transform.rotation = Quaternion.LookRotation(transform.position - _data.shooter.Get_Center_position());
|
|
TargetTr = _data.target.transform;
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
if (DSUtil.CheckNull(TargetTr)) return;
|
|
|
|
waitTime += Time.deltaTime;
|
|
|
|
// 오브젝트가 위쪽으로 랜덤한 위치로 올라감
|
|
if (!hasReachedRandomPos)
|
|
{
|
|
transform.position = Vector3.Lerp(transform.position, randomPos, Time.deltaTime * upspeed);
|
|
|
|
// 랜덤 위치에 거의 도달했을 때
|
|
if (Vector3.Distance(transform.position, randomPos) < 0.1f)
|
|
{
|
|
hasReachedRandomPos = true;
|
|
waitTime = 0; // 대기 시간 초기화
|
|
}
|
|
}
|
|
else if (waitTime < 1.0f)
|
|
{
|
|
// 대기 시간 동안 아무것도 하지 않음
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
// 타겟 방향으로 추적 이동 시작
|
|
dis = Vector3.Distance(transform.position, TargetTr.position); // 거리 계산
|
|
speed += Time.deltaTime;
|
|
float t = speed / dis;
|
|
|
|
// 타겟 방향으로 Lerp 이동
|
|
transform.position = Vector3.LerpUnclamped(transform.position, TargetTr.position, t);
|
|
|
|
// 타겟 방향으로 회전
|
|
Vector3 directionVec = TargetTr.position - transform.position;
|
|
Quaternion qua = Quaternion.LookRotation(directionVec);
|
|
transform.rotation = Quaternion.Slerp(transform.rotation, qua, Time.deltaTime * 2f);
|
|
}
|
|
}
|
|
} |