예제 #1
0
 protected virtual void OnEnable()
 {
     //distanceData.IsEnabel = true;
     //统一调用,去匹配数据,还需要一个数据,每隔一段时间校验一次,用于匹配执行顺序等情况
     DistanceStorage.AddDistanceData(this);
     IsEnable = true;
 }
예제 #2
0
        protected virtual void OnEnable()
        {
            distanceData.IsEnabel = true;
            //统一调用,去匹配数据,还需要一个数据,每隔一段时间校验一次,用于匹配执行顺序等情况
            DistanceStorage.AddDistanceData(distanceData);

            //检索一次,是否有物体在距离内,在的话,则进行处理
        }
예제 #3
0
 protected virtual void OnDisable()
 {
     distanceData.IsEnabel = false;
     DistanceStorage.DeleteDistanceData(distanceData);
 }
예제 #4
0
        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();
        }
예제 #5
0
 protected void OnDestroyInteraction()
 {
     DistanceStorage.DeleteDistanceData(interaction.distanceData);
     DestroyImmediate(interaction);
 }
예제 #6
0
        /// <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;
            }
        }
예제 #7
0
 protected virtual void OnDisable()
 {
     //distanceData.IsEnabel = false;
     DistanceStorage.DeleteDistanceData(this);
     IsEnable = false;
 }