using DG.Tweening; using System.Collections; using System.Collections.Generic; using UnityEngine; /******************************************************************************* *Create By CG *Function 在一定范围内触碰后悬停 *******************************************************************************/ namespace ZXK.GYJQR { public class FanWeiXuanTingCtrl : Step_0 { [HideInInspector] public BoundTrigger boundTrigger;//边缘检测对象 [HideInInspector] public bool isComplete = false;//是否完成边缘检测 public FanWeiXuanTingCtrl(AZBS itemAttr) : base(itemAttr) { } /// /// 执行路径位移的逻辑(临时效果) /// public void OnTempExcutePathMove(string jumpStepName, string followMouseGeoName) { PathManager pm = outLineParts[0].GetComponent() ? outLineParts[0].GetComponent() : outLineParts[0].AddComponent(); pm.onMouseDown = new UnityEngine.Events.UnityEvent(); pm.onMouseDown.AddListener(() => { if (!CG.UTility.PopUpMng._TriAble) return; GameObject mouseGeo = ModelManager.Instance.SeekAZBSPart(followMouseGeoName); mouseGeo.GetComponent().useGravity = false; mouseGeo.GetComponent().isTrigger = true; //mouseGeo.GetComponent().isFollow = false; mouseGeo.GetComponent().isKinematic = true; Vector3 targetPos = outLineParts[0].transform.Find("BoundTrigger/TargetPosTemp").position; mouseGeo.transform.DOMove(targetPos, 2.0f).onComplete += () => { StepEnd(); StepManager.Instance.SwitchStep(jumpStepName); }; pm.onMouseDown.RemoveAllListeners(); }); } /// /// 执行路径位移的逻辑 /// public void OnExcutePathMove(string boundTriGeoName, string checkInGeoName, string jumpStepName) { boundTrigger = ModelManager.Instance.SeekAZBSPart(boundTriGeoName).transform.GetChild(0).GetComponent(); ModelManager.Instance.SeekPathModeWithName(checkInGeoName).GetComponent()._boundTrigger = boundTrigger; boundTrigger.enabled = true; boundTrigger.onNearEdge.AddListener(() => { if (!CG.UTility.PopUpMng._TriAble) return; MouseEventListener mel = ModelManager.Instance.SeekPathModeWithName(checkInGeoName).GetComponent(); mel.GetComponent().useGravity = false; mel.GetComponent().isTrigger = true; mel.GetComponent().isFollow = false; mel.GetComponent().isKinematic = true; mel.transform.position = boundTrigger.transform.Find("TargetPosTemp").position; CG.UTility.MonoManager.Instance.DestroyImmediate(mel.GetComponent()); CG.UTility.MonoManager.Instance.DestroyImmediate(mel); boundTrigger.enabled = false; boundTrigger.onNearEdge.RemoveAllListeners(); boundTrigger.onOutEdge.RemoveAllListeners(); StepManager.Instance.SwitchStep(jumpStepName); StepEnd(); }); boundTrigger.onOutEdge.AddListener(() => { MouseEventListener mel = ModelManager.Instance.SeekPathModeWithName(checkInGeoName).GetComponent(); if (mel == null) { return; } mel.GetComponent().useGravity = true; mel.GetComponent().isTrigger = false; mel.GetComponent().isFollow = false; boundTrigger.enabled = false; boundTrigger.onNearEdge.RemoveAllListeners(); boundTrigger.onOutEdge.RemoveAllListeners(); }); } public void MouseDownCheck(string checkInGeoTag) { if (!isComplete && boundTrigger != null && boundTrigger.enabled) { if (!CG.UTility.PopUpMng._TriAble) return; if (boundTrigger.OnNearEdge(checkInGeoTag)) { boundTrigger.onOutEdge.RemoveAllListeners(); boundTrigger.onNearEdge?.Invoke(); isComplete = true; } else { boundTrigger.onOutEdge?.Invoke(); } } } } }