using UnityEngine; /// /// 火车 /// public class Train : MonoBehaviour { /// /// 火车对象 /// public GameObject trainObj; /// /// 左点 /// public Transform leftPoint; /// /// 右点 /// public Transform rightPoint; /// /// 方向 /// private E_DirectionType e_DirectionType; /// /// 刚体 /// public Rigidbody rb; /// /// 是否死亡 /// private bool isDie; /// /// 是否预警 /// private bool isEarlyWarning; private void OnEnable() { isEarlyWarning = false; isDie = false; rb.useGravity = false; rb.isKinematic = true; } private void OnDisable() { rb.velocity = Vector3.zero; } private void Update() { if (Vector3.Distance(Scenes.Instance.player.transform.position, this.transform.position) < 120&& !isDie) { if (!isEarlyWarning) { AudioManager.Instance.PlaySound(YooAssetManager.Instance.LoadAssetSync(PackagesName.GameData, "TrainPass")); UIManager.Instance.GetUI().SetEarlyWarning(e_DirectionType); isEarlyWarning = true; } trainObj.transform.Translate(trainObj.transform.forward * Scenes.Instance.gameScene.trainMoveSpeed * Time.deltaTime, Space.World); } } /// /// 击飞 /// public void ShootFly(Transform transform) { if (isDie) return; isDie = true; rb.useGravity = true; rb.isKinematic = false; rb.AddForce((transform.position - this.transform.position).normalized * -100, ForceMode.Impulse); rb.AddForce(Vector3.up * 20, ForceMode.Impulse); rb.AddTorque(new Vector3(Random.Range(-180, 180), Random.Range(-180, 180), Random.Range(-180, 180)), ForceMode.Impulse); } /// /// 设置方向 /// public void SetDirection(E_DirectionType e_DirectionType) { this.e_DirectionType = e_DirectionType; switch (e_DirectionType) { case E_DirectionType.Left: trainObj.transform.position = leftPoint.position; trainObj.transform.localEulerAngles = new Vector3(0, 180, 0); break; case E_DirectionType.Right: trainObj.transform.position = rightPoint.position; trainObj.transform.localEulerAngles = new Vector3(0, 0, 0); break; } } }