解决场景添加标签过多方法

1.标签:TiggerManangr

2.枚举分类触发状态,场景类别,场景1里的触发,场景2里触发等 

 public enum Collision_OnTrigger_Classification    //触发器分类
        {
            Enter,  //进入
            Stay,  //停留
            Exit   //退出
        }

  

 public enum FPSControllerForScenesState         
 {
            OperationAndCommissioning,  //漫游
            SafetyAccident,  //安全(事故)
            On_Site_Inspection, //巡检
            ElectricalPrinciple,//电气原理 
            OperationAndCommissioning_Huaxian
 }
 public enum FPSControllerForScenesState_ElectricalPrinciple
        {
            TowerBottomElectricalCabinet,//塔底电器柜
            ElectricalCabinetEngineRoom,//机舱电器柜
            HubElectricalCabinet       //轮毂电器柜
        }

3.脚本·SceneTriggerSelectManager(选择场景以及场景下的触发) 绑定在每一触发器下 

  public class FPSControllerAllCollisionManager : MonoBehaviour
    {
        [Header("场景分类:")]
        [SerializeField] private EnumManager.FPSControllerForScenesState thisCollisionState;
        [Header("漫游:")]
        [SerializeField] private EnumManager.FPSControllerForScenesState_OperationAndCommissioning thisEnumOperationAndCommissioning;
        [Header("事故:")]
        [SerializeField] private EnumManager.FPSControllerState thisEnumFPSControllerState;
        [Header("巡检:")]
        [SerializeField] private EnumManager.FPSControllerForScenesState__On_Site_Inspection thisEnum__On_Site_Inspection;
        [Header("电器原理")]
        [SerializeField] private EnumManager.FPSControllerForScenesState_ElectricalPrinciple thisEnum_ElectricalPrinciple;
        [Header("漫游滑县")]
        [SerializeField] private EnumManager.FPSControllerForScenesState_OperationAndCommissioning thisEnum_OperationAndCommissioningHuaxian;

        public EnumManager.FPSControllerForScenesState ThisCollisionState
        {
            get => thisCollisionState;
            //set => thisCollisionState = value;
        }
        public EnumManager.FPSControllerForScenesState_OperationAndCommissioning ThisEnumOperationAndCommissioning
        {
            get => thisEnumOperationAndCommissioning;
            //set => thisEnumOperationAndCommissioning = value;
        }
        public EnumManager.FPSControllerState ThisEnumFPSControllerState
        {
            get => thisEnumFPSControllerState;
            //set => thisEnumFPSControllerState = value;
        }
        public EnumManager.FPSControllerForScenesState__On_Site_Inspection ThisEnum__On_Site_Inspection
        {
            get => thisEnum__On_Site_Inspection;
            //set => thisEnum__On_Site_Inspection = value;
        }
        public EnumManager.FPSControllerForScenesState_ElectricalPrinciple ThisEnum_ElectricalPrinciple
        {
            get => thisEnum_ElectricalPrinciple;
        }
        public EnumManager.FPSControllerForScenesState_OperationAndCommissioning ThisEnum_OperationAndCommissioningHuaxian
        {
            get => thisEnum_OperationAndCommissioningHuaxian;
        }

    }

 4.创建脚本CharacterTriggerManager

(从进入触发,一直再触发,离开触发开始——>调用第一个方法(先按场景分类Switch分支——>再按触发器分类Switch分支——>在调用第二个方法(进入场景1的触发状态方法)(按场景1下触发对象分类))) 

 public void OnTriggerEnter(Collider other)
        {
            if (other.tag == "FPSControllerCollisionTarget")  //新的碰撞目标tag
            {
                DoCollisionClassification(other, EnumManager.Collision_OnTrigger_Classification.Enter);
            }                            
        }

        private void OnTriggerStay(Collider other)
        {
            if (other.tag == "FPSControllerCollisionTarget")  //新的碰撞目标tag
            {
                DoCollisionClassification(other, EnumManager.Collision_OnTrigger_Classification.Stay);
            }           
        }

        private void OnTriggerExit(Collider other)
        {
            if (other.tag == "FPSControllerCollisionTarget")  //新的碰撞目标tag
            {
                DoCollisionClassification(other, EnumManager.Collision_OnTrigger_Classification.Exit);
            }           
        }

  

 public void DoCollisionClassification(Collider other, EnumManager.Collision_OnTrigger_Classification thisTriggerClassification)
        {
            //警告黄色一直报错
            FPSControllerAllCollisionManager thisOtherCollisionManager = new FPSControllerAllCollisionManager();

            try
            {
                thisOtherCollisionManager = other.gameObject.GetComponent<FPSControllerAllCollisionManager>();
            }
            catch (Exception)
            {

                Debug.Log("thisOtherCollisionManager读取错误!");
                return;
            }
            EnumManager.FPSControllerForScenesState thisFristState = thisOtherCollisionManager.ThisCollisionState;//场景分类

            switch (thisFristState)
            {
                case EnumManager.FPSControllerForScenesState.OperationAndCommissioning:  //漫游
                    EnumManager.FPSControllerForScenesState_OperationAndCommissioning thisOperationAndCommissioningState = thisOtherCollisionManager.ThisEnumOperationAndCommissioning;
                    switch (thisTriggerClassification)
                    {
                        case EnumManager.Collision_OnTrigger_Classification.Enter:
                            DoOnTriggerEnterOperationAndCommissioning(thisOperationAndCommissioningState);
                            break;
                        case EnumManager.Collision_OnTrigger_Classification.Stay:
                            DoOnTriggerStayOperationAndCommissioning(thisOperationAndCommissioningState, other);
                            break;
                        case EnumManager.Collision_OnTrigger_Classification.Exit:
                            DoOnTriggerExitOperationAndCommissioning(thisOperationAndCommissioningState, other);
                            break;
                        default:
                            break;
                    }
                    break;
                case EnumManager.FPSControllerForScenesState.SafetyAccident:  //安全(事故)
                    EnumManager.FPSControllerState thisFallingObjectsState = thisOtherCollisionManager.ThisEnumFPSControllerState;
                    switch (thisTriggerClassification)
                    {
                        case EnumManager.Collision_OnTrigger_Classification.Enter:
                            DoOnTriggerEnterSafetyAccident(thisFallingObjectsState);
                            break;
                        case EnumManager.Collision_OnTrigger_Classification.Stay:
                            break;
                        case EnumManager.Collision_OnTrigger_Classification.Exit:
                            break;
                        default:
                            break;
                    }
                    break;
                case EnumManager.FPSControllerForScenesState.On_Site_Inspection:  //巡检
                    EnumManager.FPSControllerForScenesState__On_Site_Inspection this__On_Site_Inspection__State = thisOtherCollisionManager.ThisEnum__On_Site_Inspection;
                    switch (thisTriggerClassification)
                    {
                        case EnumManager.Collision_OnTrigger_Classification.Enter:
                            DoOnTriggerEnter__On_Site_Inspection(this__On_Site_Inspection__State);
                            break;
                        case EnumManager.Collision_OnTrigger_Classification.Stay:
                            break;
                        case EnumManager.Collision_OnTrigger_Classification.Exit:
                            break;
                        default:
                            break;
                    }
                    break;
                case EnumManager.FPSControllerForScenesState.ElectricalPrinciple://电气原理
                    EnumManager.FPSControllerForScenesState_ElectricalPrinciple this_electrical_state = thisOtherCollisionManager.ThisEnum_ElectricalPrinciple;
                    switch (thisTriggerClassification)
                    {
                        case EnumManager.Collision_OnTrigger_Classification.Enter:
                            DoOnTriggerEnter_ElectricalPrinciple(this_electrical_state);
                            break;
                        case EnumManager.Collision_OnTrigger_Classification.Stay:
                            break;
                        case EnumManager.Collision_OnTrigger_Classification.Exit:
                            DoOnTriggerExit_ElectricalPrinciple(this_electrical_state);
                            break;
                        default:
                            break;
                    }
                    break;
                case EnumManager.FPSControllerForScenesState.OperationAndCommissioning_Huaxian://滑县漫游
                    EnumManager.FPSControllerForScenesState_OperationAndCommissioning this_OperationAndCommissioning_Huaxian_state = thisOtherCollisionManager.ThisEnum_OperationAndCommissioningHuaxian;
                    switch (thisTriggerClassification)
                    {
                        case EnumManager.Collision_OnTrigger_Classification.Enter:
                            DoOnTriggerEnterOperationAndCommissioningHuXian(this_OperationAndCommissioning_Huaxian_state);
                            break;
                        case EnumManager.Collision_OnTrigger_Classification.Stay:
                            break;
                        case EnumManager.Collision_OnTrigger_Classification.Exit:
                            DoOnTriggerExitOperationAndCommissioningHuaXian(this_OperationAndCommissioning_Huaxian_state,other);
                            break;
                        default:
                            break;
                    }
                    break;
                default:
                    break;
            }
        }

  Enter:

  #region 电气原理
        private void DoOnTriggerEnter_ElectricalPrinciple(EnumManager.FPSControllerForScenesState_ElectricalPrinciple this_ElectricalPrinciple_State)
        {
            switch (this_ElectricalPrinciple_State)
            {
                case EnumManager.FPSControllerForScenesState_ElectricalPrinciple.TowerBottomElectricalCabinet://塔底电器柜                                                                                                             //StudyElectrical.gameObject.SetActive(true);
                    _IsStartLoading = true;
                    break;
                case EnumManager.FPSControllerForScenesState_ElectricalPrinciple.ElectricalCabinetEngineRoom://机舱电器柜                                                                                                             //StudyElectrical.gameObject.SetActive(true);
                    _IsStartLoadingThree = true;
                    break;
                case EnumManager.FPSControllerForScenesState_ElectricalPrinciple.HubElectricalCabinet://轮毂电器柜
                    break;
                default:
                    break;
            }
        }

  Stay:

 #region 电气原理
        private void DoOnTriggerStay_ElectricalPrinciple(EnumManager.FPSControllerForScenesState_ElectricalPrinciple this_ElectricalPrinciple_State)
        {
            switch (this_ElectricalPrinciple_State)
            {
                case EnumManager.FPSControllerForScenesState_ElectricalPrinciple.TowerBottomElectricalCabinet://塔底电器柜                                                                                                             //StudyElectrical.gameObject.SetActive(true);
                    _IsStartLoading = true;
                    break;
                case EnumManager.FPSControllerForScenesState_ElectricalPrinciple.ElectricalCabinetEngineRoom://机舱电器柜                                                                                                             //StudyElectrical.gameObject.SetActive(true);
                    _IsStartLoadingThree = true;
                    break;
                case EnumManager.FPSControllerForScenesState_ElectricalPrinciple.HubElectricalCabinet://轮毂电器柜
                    break;
                default:
                    break;
            }
        }

  Exit:

  #region 电器原理
        private void DoOnTriggerExit_ElectricalPrinciple(EnumManager.FPSControllerForScenesState_ElectricalPrinciple this_Electrical_State)
        {
            switch (this_Electrical_State)
            {
                case EnumManager.FPSControllerForScenesState_ElectricalPrinciple.TowerBottomElectricalCabinet:
                    break;
                case EnumManager.FPSControllerForScenesState_ElectricalPrinciple.ElectricalCabinetEngineRoom:
                    break;
                case EnumManager.FPSControllerForScenesState_ElectricalPrinciple.HubElectricalCabinet:
                    break;
                default:
                    break;
            }
        }
        #endregion

  其他场景同理

posted @ 2021-03-04 17:03  一路繁华的夏ˇ  阅读(57)  评论(0)    收藏  举报