protected virtual void OnEnable() { //distanceData.IsEnabel = true; //统一调用,去匹配数据,还需要一个数据,每隔一段时间校验一次,用于匹配执行顺序等情况 DistanceStorage.AddDistanceData(this); IsEnable = true; }
protected virtual void OnEnable() { distanceData.IsEnabel = true; //统一调用,去匹配数据,还需要一个数据,每隔一段时间校验一次,用于匹配执行顺序等情况 DistanceStorage.AddDistanceData(distanceData); //检索一次,是否有物体在距离内,在的话,则进行处理 }
protected virtual void OnDisable() { distanceData.IsEnabel = false; DistanceStorage.DeleteDistanceData(distanceData); }
protected void GetDistanceInfo() { List <DistanceData> distances = new List <DistanceData>(); switch (interaction.distanceData.interactionType) { case InteractionType.Send: //根据这个发送端,获取到所有的接收点信息 distances = DistanceStorage.GetReceiveDistanceDatas(interaction.distanceData); break; case InteractionType.Receive: var managers = DistanceStorage.GetSendDistaceDataAll(interaction.distanceData, InteractionType.Send); foreach (var item in managers) { distances.Add(item.sendData); } break; case InteractionType.All: var managerAlls = DistanceStorage.GetSendDistaceDataAll(interaction.distanceData, InteractionType.All); /*&& !obj.sendData.EqualsObject(interaction.distanceData)*/ foreach (var item in managerAlls) { distances.Add(item.sendData); } break; case InteractionType.Pour: var managerPours = DistanceStorage.GetSendDistaceDataAll(interaction.distanceData, InteractionType.Pour); /*&& !obj.sendData.EqualsObject(interaction.distanceData)*/ foreach (var item in managerPours) { distances.Add(item.sendData); } break; default: break; } if (distances.Count == 0) { return; } GUILayout.Space(20); GUILayout.BeginVertical("box"); GUILayout.Label("在场景中与这个距离有绑定的【距离物体】"); //距离信息遍历 foreach (var distance in distances) { if (distance.Interaction == null) { continue; } if (GUILayout.Button(distance.interactionType.ToString() + ":" + (distance.Interaction != null ? distance.Interaction.name : "获取绑定物体失败"), GUILayout.Width(250))) { if (distance.Interaction != null) { Selection.activeGameObject = distance.Interaction.gameObject; } } } GUILayout.EndVertical(); }
protected void OnDestroyInteraction() { DistanceStorage.DeleteDistanceData(interaction.distanceData); DestroyImmediate(interaction); }
/// <summary> /// 未加入时的GUI布局 /// </summary> protected void NormalEditorGUI() { interaction.distanceData.interactionType = (InteractionType)EditorGUILayout.EnumPopup("交互类型:", interaction.distanceData.interactionType); switch (interaction.distanceData.interactionType) { case InteractionType.Receive: GUILayout.BeginHorizontal(); GUILayout.Label("交互唯一ID:"); if (EditorGUILayout.DropdownButton(new GUIContent(interaction.distanceData.TagID), FocusType.Passive)) { var sends = DistanceStorage.GetSendDistanceData(InteractionType.Send); GenericMenu menu = new GenericMenu(); foreach (var send in sends) { if (string.IsNullOrEmpty(send.sendData.TagID)) { continue; } AddMenuItemForValue(menu, send.sendData.TagID); } menu.ShowAsContext(); } GUILayout.EndHorizontal(); //绘制距离信息 DrawDistanceInfo(); break; case InteractionType.Send: interaction.distanceData.TagID = EditorGUILayout.TextField("交互唯一ID:", interaction.distanceData.TagID); interaction.distanceData.detectType = (InteractionDetectType)EditorGUILayout.EnumPopup("距离检测优先级:", interaction.distanceData.detectType); interaction.distanceData.IsGrabOwn = EditorGUILayout.Toggle("抓取本身触发:", interaction.distanceData.IsGrabOwn); interaction.AutoDetection = EditorGUILayout.Toggle(new GUIContent("初始交互:", "执行Start函数时,会自动检索在距离内的接收点,并且进行交互"), interaction.AutoDetection); break; case InteractionType.All: case InteractionType.Pour: interaction.distanceData.TagID = EditorGUILayout.TextField("交互唯一ID:", interaction.distanceData.TagID); GUILayout.BeginHorizontal(); GUILayout.Space(230); if (EditorGUILayout.DropdownButton(new GUIContent(interaction.distanceData.TagID), FocusType.Keyboard)) { var alls = DistanceStorage.GetSendDistanceData(InteractionType.All); GenericMenu menu = new GenericMenu(); foreach (var all in alls) { if (string.IsNullOrEmpty(all.sendData.TagID)) { continue; } AddMenuItemForValue(menu, all.sendData.TagID); } menu.ShowAsContext(); } GUILayout.EndHorizontal(); interaction.distanceData.IsGrabOwn = EditorGUILayout.Toggle("抓取本身触发:", interaction.distanceData.IsGrabOwn); interaction.AutoDetection = EditorGUILayout.Toggle(new GUIContent("初始交互:", "执行Start函数时,会自动检索在距离内的接收点,并且进行交互"), interaction.AutoDetection); GUILayout.Space(10); interaction.distanceData.detectType = (InteractionDetectType)EditorGUILayout.EnumPopup("距离检测优先级:", interaction.distanceData.detectType); //绘制距离信息 DrawDistanceInfo(); break; default: break; } }
protected virtual void OnDisable() { //distanceData.IsEnabel = false; DistanceStorage.DeleteDistanceData(this); IsEnable = false; }