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

40 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;
// 방향에 수직인 벡터를 구합니다 (좌우 흔들림용)
Vector3 perpendicular = Vector3.Cross(direction, Vector3.up).normalized;
while (elapsedTime * m_ProjecTileData.Speed < totalDistance)
{
elapsedTime += Time.deltaTime;
Vector3 linearPosition = start + direction * (elapsedTime * m_ProjecTileData.Speed);
// 흔들림 방향을 이동 방향의 수직 방향으로 적용
float waveOffset = Mathf.Sin(elapsedTime * waveFrequency + wavePhase) * waveAmplitude;
Vector3 waveOffsetVec = perpendicular * waveOffset;
transform.position = linearPosition + waveOffsetVec;
yield return null;
}
Off(true);
}
}