using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using VRTK; using DG.Tweening; /// /// 普通螺栓交互控制类 触发控制 默认是安装好的 每次激活只能操作一次 /// public class SimpleLuoShuan : VRUsableStepActionBase { Vector3 fixedPos; [Tooltip("拆下时移动方向")] public Vector3 moveLocalAixs;//拆装时移动方向和数值 [Tooltip("卸下时是否隐藏")] public bool unFixedHide; //拆下动画播放完成后隐藏的物体 public List unFixedHideOthers = new List(); //ture 时播放安装动画前显示 false播放安装动画完成后显示 public bool otherActiveOnStartInstall = false; Collider thisCollider; MeshRenderer thisMeshRenderer;//当前物体或子物体的MeshRenderer protected override void Awake() { base.Awake(); fixedPos = this.transform.localPosition; thisCollider = this.GetComponent(); thisMeshRenderer = this.GetComponentInChildren(); } private void UnFixedMoveOver() { if (unFixedHide) { thisMeshRenderer.enabled = false; if (thisCollider) thisCollider.enabled = false; } unFixedOver?.Invoke(); unFixedOver = null;//执行一次后清除事件 避免重复触发 if (otherActiveOnStartInstall)//安装时先显示的,拆的时候动画完了再消失 { for (int i = 0; i < unFixedHideOthers.Count; i++) { unFixedHideOthers[i].SetActive(false); } } } ////装上螺丝指令触发 //protected override void InteractableObjectUnused(object sender, InteractableObjectEventArgs e) //{ // //SetUsable(false);//安装过程中无法再次交互 避免双击 // //this.transform.DOLocalMove(fixedPos, 1f).OnComplete(FixedMoveOver);//播放安装动画 //} //安装完成 private void FixedMoveOver() { fixedOver?.Invoke(); fixedOver = null; if (!otherActiveOnStartInstall) { for (int i = 0; i < unFixedHideOthers.Count; i++) { unFixedHideOthers[i].SetActive(true); } } } //激活时若当前螺栓处于隐藏状态则显示螺栓 public override void Active(ProcessEnum stepName, UnityAction nodeFinishedEvent) { base.Active(stepName, nodeFinishedEvent); if (unFixedHide && thisMeshRenderer.enabled == false) { thisMeshRenderer.enabled = true; if (thisCollider) thisCollider.enabled = true; } } /// /// VRUsable 主动/同步触发时执行 /// public override void OnUsed() { if (!interactableObject.isUsable) return; SetUsable(false);//只能触发一次 避免重复触发结束事件 if (processName == ProcessEnum.teardown) { this.transform.DOLocalMove(fixedPos + moveLocalAixs, 1f).OnComplete(UnFixedMoveOver);//播放拆卸动画 if (!otherActiveOnStartInstall)//安装时后显示的,拆的时候先消失 { for (int i = 0; i < unFixedHideOthers.Count; i++) { unFixedHideOthers[i].SetActive(false); } } } else { this.transform.DOLocalMove(fixedPos, 1f).OnComplete(FixedMoveOver);//播放安装动画 if (otherActiveOnStartInstall) { for (int i = 0; i < unFixedHideOthers.Count; i++) { unFixedHideOthers[i].SetActive(true); } } } } }