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

41 lines
1.5 KiB
C#

using System.Collections;
using UnityEngine;
public class Projectile_WaveMove : ProjectileBase
{
/// <summary>
/// waveAmplitude : 좌우 진폭 (X축 흔들림의 크기)
/// waveFrequency : 좌우 주파수 (X축 흔들림의 속도)
/// </summary>
public override void Launch(Vector3 start, Vector3 end, float wavePhase, float waveAmplitude, float waveFrequency)
{
StartCoroutine(MoveWithWave(start, end, wavePhase, waveAmplitude, waveFrequency));
}
private IEnumerator MoveWithWave(Vector3 start, Vector3 end, float wavePhase, float waveAmplitude, float waveFrequency)
{
float elapsedTime = 0f;
float totalDistance = Vector3.Distance(start, end);
Vector3 direction = (end - start).normalized; // 목표 지점으로의 방향
while (elapsedTime * m_ProjecTileData.Speed < totalDistance)
{
elapsedTime += Time.deltaTime;
// 현재 직선상의 위치
Vector3 linearPosition = start + direction * (elapsedTime * m_ProjecTileData.Speed);
// 사인파로 X축 좌우 흔들림 추가
float waveOffsetX = Mathf.Sin(elapsedTime * waveFrequency + wavePhase) * waveAmplitude;
// 최종 위치: 흔들림 추가
Vector3 wavyPosition = linearPosition + new Vector3(waveOffsetX, 0f, 0f);
transform.position = wavyPosition;
yield return null;
}
// 목표 지점 도달 후 투사체 삭제
Off(true);
}
}