using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class ArrowTraceDebug : MonoBehaviour { [SerializeField] Transform cameraTF; [SerializeField] Transform tracePoints; [SerializeField] Button btnTap; [SerializeField] ButtonListener btnL; [SerializeField] ButtonListener btnR; bool isBtnLDown = false; bool isBtnRDown = false; bool isValid = false; public static ArrowTraceDebug ins; void Awake() { ins = this; } void OnDestroy() { if (ins == this) ins = null; } void Start() { btnTap.onClick.AddListener(() => { isValid = !isValid; CheckValidAndUpdateUI(); }); btnL.onPointerDown += (e) => { isBtnLDown = true; }; btnL.onPointerUp += (e) => { isBtnLDown = false; }; btnR.onPointerDown += (e) => { isBtnRDown = true; }; btnR.onPointerUp += (e) => { isBtnRDown = false; }; CheckValidAndUpdateUI(); } void Update() { if (isValid) { if (isBtnLDown) { MoveCamera(Time.deltaTime * -20f); } if (isBtnRDown) { MoveCamera(Time.deltaTime * 20f); } } } void CheckValidAndUpdateUI() { btnTap.GetComponentInChildren().text = isValid ? "退出查看" : "查看轨迹"; btnL.gameObject.SetActive(isValid); btnR.gameObject.SetActive(isValid); cameraTF.gameObject.SetActive(isValid); tracePoints.gameObject.SetActive(isValid); } void MoveCamera(float dz) { Vector3 pos = cameraTF.transform.localPosition; pos.z += dz; cameraTF.transform.localPosition = pos; } Arrow arrow; public void OnArrowUpdate(Arrow arrow) { if (arrow != this.arrow) { this.arrow = arrow; ClearTracePoints(); } GameObject.Instantiate( this.tracePoints.GetChild(0).gameObject, arrow.transform.position, Quaternion.identity, this.tracePoints ).SetActive(true); } void ClearTracePoints() { for (int i = 1; i < this.tracePoints.childCount; i++) { Transform t = this.tracePoints.GetChild(i); if (t && t.gameObject) Destroy(t.gameObject); } } }