using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; //一组螺栓 所有螺栓完成操作步骤时 执行螺栓组结束事件 [RequireComponent(typeof(VRInterStepNode))] public class LuoShuanZu : MonoBehaviour,IStepNodeAction { public VRUsableStepActionBase[] simpleLuoShuans; protected int NotFinishedCount;//激活后未完成操作的螺栓 protected UnityAction nodeFinishedEvent; void Awake() { if (simpleLuoShuans == null||simpleLuoShuans.Length==0)//未设置螺栓时 自动从子物体中查找 simpleLuoShuans = this.GetComponentsInChildren(); if (simpleLuoShuans == null || simpleLuoShuans.Length == 0)//为查询到 提示错误 Debug.LogError($"螺栓组{gameObject.name}子物体不包含螺栓,需要手动指定"); } public virtual void Active(ProcessEnum stepName, UnityAction nodeFinishedEvent) { this.nodeFinishedEvent = nodeFinishedEvent; NotFinishedCount = simpleLuoShuans.Length; for (int i = 0; i < simpleLuoShuans.Length; i++) { simpleLuoShuans[i].Active(stepName, OneLuoShuanFinished); } } public virtual void UnActive(ProcessEnum stepName) { for (int i = 0; i < simpleLuoShuans.Length; i++) { simpleLuoShuans[i].UnActive(stepName); } } //一个螺栓完成操作了 private void OneLuoShuanFinished() { //Debug.Log("一个螺栓完成了"); NotFinishedCount--; if (NotFinishedCount == 0)//所有螺栓都完成交互了 { nodeFinishedEvent?.Invoke(); } } }