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