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

浙公网安备 33010602011771号