Project_WL/Assets/Script/Character/Projectile/Projectile/Projectile_UpAndChase.cs

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