using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 回旋镖 /// public class Boomerang : MonoBehaviour { public BoomerangAfterImage m_AfterImage; private Vector2 m_Direction; // 当前速度 private float m_Speed; // 最大飞行距离 private float m_MaxDist; private float m_RotateSpeed = 500f; Coroutine m_CoAfterImage; public void Set(Vector2 dir, float speed, float maxDist) { m_Direction = dir; m_Speed = speed; m_MaxDist = maxDist; m_CoAfterImage = StartCoroutine(CoAfterImage(0.05f)); } private void Update() { Vector2 move = m_Direction * m_Speed * Time.deltaTime; m_MaxDist -= move.magnitude; if(m_MaxDist <= 0) { Destroy(this.gameObject); if (m_CoAfterImage != null) { StopCoroutine(m_CoAfterImage); } return; } Vector3 pos = transform.position; pos += new Vector3(move.x, move.y, 0); transform.position = pos; transform.rotation *= Quaternion.Euler(0,0,m_RotateSpeed * Time.deltaTime); } IEnumerator CoAfterImage(float interval) { while (true) { BoomerangAfterImage afterImage = BoomerangAfterImage.Instantiate(m_AfterImage); afterImage.Set(this); afterImage.transform.position = this.transform.position; afterImage.transform.localScale= new Vector3(0.5f, 0.5f, 1f); afterImage.transform.rotation = this.transform.rotation; afterImage.gameObject.SetActive(true); yield return new WaitForSeconds(interval); } } }