解决场景添加标签过多方法
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
其他场景同理