133 lines
2.8 KiB
C#
Raw Normal View History

2025-05-18 01:04:31 +08:00
// ***********************************************************************
// Assembly : Game
// Author : Kimch
// Created : 2020-08-28
// Description :
// Last Modified By :
// Last Modified On :
// ***********************************************************************
// <copyright file= "SpiritSword_p2" company="Kimch"></copyright>
// <summary></summary>
// ***********************************************************************
namespace G
{
using UnityEngine;
public class SpiritSword_p2 : MonoBehaviour
{
private bool _fireOn;
private Transform _target;
private Transform _parent;
private Vector3 _targetPos;
private Vector3 _direction;
private float _delta;
private float _moveSpeed;
private float _rotateSpeed;
private Collider _collider;
private TrailRenderer _trail;
private void Awake()
{
_collider = this.GetComponent<Collider>();
//_trail = GetComponent<TrailRenderer>();
}
private void OnEnable()
{
_collider.enabled = false;
_delta = 0f;
//_trail.enabled = true;
_fireOn = true;
}
private void Start()
{
_parent = transform.parent;
FireSword(_parent);
transform.parent = null;
_moveSpeed = Random.Range(1.7f, 1.9f);
_rotateSpeed = Random.Range(18f, 22f);
}
public void FireSword(Transform enemy)
{
_collider.enabled = true;
_target = enemy;
}
public void FinishSword()
{
_collider.enabled = false;
_fireOn = false;
_delta = 0f;
}
private void Update()
{
if (_fireOn)
{
Vector3 position = transform.position;
if (position.y > 0f)
{
if (_target == _parent)
{
_delta = 0.2f;
}
else if (_delta < 2f)
{
_delta += Time.deltaTime;
}
else
{
_delta = 2f;
}
if (_target != null)
{
_targetPos = _target.position;
}
else
{
_target = _parent;
}
_direction = _targetPos - position;
if (_direction != Vector3.zero)
{
transform.rotation = Quaternion.Lerp(transform.rotation, Quaternion.LookRotation(_direction), _delta * _rotateSpeed * Time.deltaTime);
}
transform.Translate(Vector3.forward * (_moveSpeed * Time.deltaTime));
//transform.position = position + transform.forward * (_speed * Time.deltaTime);
}
else
{
_collider.enabled = false;
_target = _parent;
transform.forward = Vector3.up;
transform.position = position + Vector3.up * (1.8f * Time.deltaTime);
_delta = 0f;
}
}
else
{
transform.forward = Vector3.up;
Vector3 position = transform.position;
position += Vector3.up * (1.8f * Time.deltaTime);
transform.position = position;
if (position.y > 1f)
{
this.gameObject.SetActive(false);
//_trail.enabled = false;
}
}
}
}
}