41 lines
1.5 KiB
C#
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);
|
|
}
|
|
} |