55 lines
1.6 KiB
C#
55 lines
1.6 KiB
C#
using UnityEngine;
|
|
|
|
public class BattleAttack_Siplett_Homing : MonoBehaviour
|
|
{
|
|
[Header("-= Movement =-")]
|
|
[SerializeField]
|
|
private float acceleration = 5f;
|
|
|
|
[SerializeField]
|
|
private float maxSpeed = 20f;
|
|
|
|
[SerializeField]
|
|
private float rotationSpeed = 2f;
|
|
|
|
[SerializeField]
|
|
private float rotationDuration = 3f;
|
|
|
|
private Vector2 velocity = Vector2.zero;
|
|
|
|
private float rotationTimer;
|
|
|
|
private void Start()
|
|
{
|
|
rotationSpeed = Random.Range(2, 4);
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (Battle_PlayerSoul.Instance == null)
|
|
{
|
|
Debug.LogWarning("Battle_PlayerSoul.Instance is not set.");
|
|
return;
|
|
}
|
|
rotationTimer += Time.deltaTime;
|
|
if (rotationTimer >= rotationDuration)
|
|
{
|
|
rotationSpeed = 0f;
|
|
}
|
|
Vector2 normalized = ((Vector2)Battle_PlayerSoul.Instance.transform.position - (Vector2)base.transform.position).normalized;
|
|
float b = Mathf.Atan2(normalized.y, normalized.x) * 57.29578f;
|
|
if (rotationSpeed > 0f)
|
|
{
|
|
float z = Mathf.LerpAngle(base.transform.eulerAngles.z, b, rotationSpeed * Time.deltaTime);
|
|
base.transform.rotation = Quaternion.Euler(0f, 0f, z);
|
|
}
|
|
Vector2 vector = base.transform.right;
|
|
velocity += vector * acceleration * Time.deltaTime;
|
|
if (velocity.magnitude > maxSpeed)
|
|
{
|
|
velocity = velocity.normalized * maxSpeed;
|
|
}
|
|
base.transform.position += (Vector3)velocity * Time.deltaTime;
|
|
}
|
|
}
|