// Use this for initialization void Start() { m_FSM = new FSMSystem(m_Data); m_Data.m_Go = this.gameObject; m_Data.m_FSMSystem = m_FSM; FSMIdleState idlestate = new FSMIdleState(); FSMMoveToState mtstate = new FSMMoveToState(); FSMChaseState chasestate = new FSMChaseState(); FSMAttackState attackstate = new FSMAttackState(); idlestate.AddTransition(eFSMTransition.Go_MoveTo, mtstate); idlestate.AddTransition(eFSMTransition.Go_Chase, chasestate); idlestate.AddTransition(eFSMTransition.Go_Attack, attackstate); mtstate.AddTransition(eFSMTransition.Go_Idle, idlestate); mtstate.AddTransition(eFSMTransition.Go_Chase, chasestate); mtstate.AddTransition(eFSMTransition.Go_Attack, attackstate); chasestate.AddTransition(eFSMTransition.Go_Idle, idlestate); chasestate.AddTransition(eFSMTransition.Go_Attack, attackstate); attackstate.AddTransition(eFSMTransition.Go_Idle, idlestate); attackstate.AddTransition(eFSMTransition.Go_Chase, chasestate); FSMDeadState dstate = new FSMDeadState(); m_FSM.AddGlobalTransition(eFSMTransition.Go_Dead, dstate); Debug.Log("add state"); m_FSM.AddState(idlestate); m_FSM.AddState(mtstate); m_FSM.AddState(chasestate); m_FSM.AddState(attackstate); m_FSM.AddState(dstate); }
public void Init(int id, CitizenType citizenType) { #region 初始化参数 timeAlive = 0; ID = id; CitizenType = citizenType; bWearingMask = false; bRecalculatePathKey = false; bCheckAmbulanceKey = false; CureTimeTotal = CitizenMgr.GenerateCureTime(); LatentTimeTotal = CitizenMgr.GenerateLatentTime(); ToHospTimeTotal = CitizenMgr.GenerateToHospitalTime(); AliveTimeTotal = CitizenMgr.GenerateAliveTime(); InfectRate = CitizenMgr.GenerateInfectRate(); #endregion #region 初始化组件 spriteRenderer = GetComponent <SpriteRenderer>(); navAgent = GetComponent <NavMeshAgent>(); animator = GetComponent <Animator>(); citizenStatus = GetComponent <CitizenStatus>(); boxCollider = GetComponent <BoxCollider>(); navAgent.updateRotation = false; citizenStatus.Init(transform); #endregion #region 初始化状态机 fsmSystem = new FSMSystem(); FSMHealthyState healthyState = new FSMHealthyState(fsmSystem); healthyState.AddTransition(FSMTransition.Infected, FSMStateID.LatentFSMStateID); FSMLatentState latentState = new FSMLatentState(fsmSystem); latentState.AddTransition(FSMTransition.AfterLatent, FSMStateID.IllFSMStateID); latentState.AddTransition(FSMTransition.TookByAmbulance, FSMStateID.ToHospitalFSMStateID); latentState.AddTransition(FSMTransition.CantTakeAmbulance, FSMStateID.WaitToHospFSMStateID); FSMIllState illState = new FSMIllState(fsmSystem); illState.AddTransition(FSMTransition.WantHealing, FSMStateID.WaitToHospFSMStateID); illState.AddTransition(FSMTransition.ToLate, FSMStateID.DeadFSMStateID); illState.AddTransition(FSMTransition.TookByAmbulance, FSMStateID.ToHospitalFSMStateID); illState.AddTransition(FSMTransition.CantTakeAmbulance, FSMStateID.WaitToHospFSMStateID); FSMWaitHospState waitToHospitalState = new FSMWaitHospState(fsmSystem); waitToHospitalState.AddTransition(FSMTransition.BedsAvailable, FSMStateID.ToHospitalFSMStateID); waitToHospitalState.AddTransition(FSMTransition.ToLate, FSMStateID.DeadFSMStateID); FSMToHospitalState toHospitalState = new FSMToHospitalState(fsmSystem); toHospitalState.AddTransition(FSMTransition.ReachHospital, FSMStateID.InHospitalFSMStateID); toHospitalState.AddTransition(FSMTransition.ToLate, FSMStateID.DeadFSMStateID); FSMInHospitalState inHospitalState = new FSMInHospitalState(fsmSystem); inHospitalState.AddTransition(FSMTransition.Healed, FSMStateID.CuredFSMStateID); inHospitalState.AddTransition(FSMTransition.HealingFailed, FSMStateID.DeadFSMStateID); inHospitalState.AddTransition(FSMTransition.ToLate, FSMStateID.DeadFSMStateID); FSMCuredState curedState = new FSMCuredState(fsmSystem); FSMDeadState deadState = new FSMDeadState(fsmSystem); List <FSMBaseState> statesList = new List <FSMBaseState> { healthyState, latentState, illState, waitToHospitalState, toHospitalState, inHospitalState, curedState, deadState }; foreach (FSMBaseState state in statesList) { state.Init(this, animator); } switch (citizenType) { case CitizenType.Healthy: fsmSystem.AddFSMSate(healthyState); CitizenType = CitizenType.Healthy; break; case CitizenType.Latent: fsmSystem.AddFSMSate(latentState); CitizenType = CitizenType.Latent; break; case CitizenType.Ill: fsmSystem.AddFSMSate(illState); CitizenType = CitizenType.Ill; break; case CitizenType.InHospital: fsmSystem.AddFSMSate(inHospitalState); CitizenType = CitizenType.InHospital; break; case CitizenType.Cured: fsmSystem.AddFSMSate(curedState); CitizenType = CitizenType.Cured; break; case CitizenType.Dead: fsmSystem.AddFSMSate(deadState); CitizenType = CitizenType.Dead; break; } foreach (FSMBaseState state in statesList) { fsmSystem.AddFSMSate(state); } #endregion #region 初始化动画 int controllerIndex = Random.Range(0, 4); AnimatorOverrideController controller = new AnimatorOverrideController(); switch (controllerIndex) { case 0: controller.runtimeAnimatorController = CitizenMgr.Instance.F1; break; case 1: controller.runtimeAnimatorController = CitizenMgr.Instance.F2; break; case 2: controller.runtimeAnimatorController = CitizenMgr.Instance.M1; break; case 3: controller.runtimeAnimatorController = CitizenMgr.Instance.M2; break; default: controller.runtimeAnimatorController = CitizenMgr.Instance.F1; break; } animator.runtimeAnimatorController = controller; #endregion }
protected override void Start() { m_AIData = new MobInfo(); GameData.Instance.MobInfoTable[3200].CopyTo(m_AIData); m_MaxHp = m_AIData.m_fHp; base.Start(); m_MobAnimator = this.GetComponent <MobAnimationsController>(); m_BobyCollider = this.GetComponent <BoxCollider>(); m_DamageCollider = GetComponentInChildren <CapsuleCollider>(); m_MobAimLine = this.GetComponent <MobAimLine>(); m_FSM = new FSMSystem(m_AIData); m_AIData.m_Go = this.gameObject; m_AIData.m_FSMSystem = m_FSM; m_AIData.m_AnimationController = this.GetComponent <MobAnimationsController>(); m_AIData.navMeshAgent = this.GetComponent <NavMeshAgent>(); m_AIData.navMeshAgent.enabled = false; m_AIData.m_MobAimLine = m_MobAimLine; m_AIData.m_SoundManager = m_SoundManager; #region FSMMap #region Phase1 m_WanderIdleState.AddTransition(eFSMTransition.Go_Wander, m_WanderState); m_WanderIdleState.AddTransition(eFSMTransition.Go_Flee, m_FleeState); m_WanderIdleState.AddTransition(eFSMTransition.Go_Idle, m_IdleState); m_WanderState.AddTransition(eFSMTransition.Go_WanderIdle, m_WanderIdleState); m_WanderState.AddTransition(eFSMTransition.Go_Flee, m_FleeState); m_FleeState.AddTransition(eFSMTransition.Go_CallArmy, m_CallArmyState); #endregion #region Phase2 m_CallArmyState.AddTransition(eFSMTransition.Go_Chase, m_Chasestate); m_CallArmyState.AddTransition(eFSMTransition.Go_Dodge, m_DodgeState); m_Chasestate.AddTransition(eFSMTransition.Go_Attack, m_PatrolAttackstate); m_DodgeState.AddTransition(eFSMTransition.Go_Attack, m_PatrolAttackstate); m_PatrolAttackstate.AddTransition(eFSMTransition.Go_Idle, m_IdleState); m_PatrolAttackstate.AddTransition(eFSMTransition.Go_Chase, m_Chasestate); m_IdleState.AddTransition(eFSMTransition.Go_Chase, m_Chasestate); m_IdleState.AddTransition(eFSMTransition.Go_Dodge, m_DodgeState); m_IdleState.AddTransition(eFSMTransition.Go_Attack, m_PatrolAttackstate); m_FSMNoPlayerWanderIdleState.AddTransition(eFSMTransition.Go_NoPlayerWander, m_FSMNoPlayerWander); m_FSMNoPlayerWanderIdleState.AddTransition(eFSMTransition.Go_Chase, m_Chasestate); m_FSMNoPlayerWanderIdleState.AddTransition(eFSMTransition.Go_Dodge, m_DodgeState); m_FSMNoPlayerWander.AddTransition(eFSMTransition.Go_NoPlayerWanderIdle, m_FSMNoPlayerWanderIdleState); m_FSMNoPlayerWander.AddTransition(eFSMTransition.Go_Chase, m_Chasestate); m_FSMNoPlayerWander.AddTransition(eFSMTransition.Go_Dodge, m_DodgeState); #endregion FSMPatrolGetHurtState m_GetHurtState = new FSMPatrolGetHurtState(); FSMDeadState m_DeadState = new FSMDeadState(); m_GetHurtState.AddTransition(eFSMTransition.Go_Flee, m_FleeState); m_GetHurtState.AddTransition(eFSMTransition.Go_Chase, m_Chasestate); m_GetHurtState.AddTransition(eFSMTransition.Go_Dodge, m_DodgeState); m_DeadState.AddTransition(eFSMTransition.Go_WanderIdle, m_WanderIdleState); m_FSM.AddGlobalTransition(eFSMTransition.Go_NoPlayerWanderIdle, m_FSMNoPlayerWanderIdleState); m_FSM.AddGlobalTransition(eFSMTransition.Go_PatrolGetHurt, m_GetHurtState); m_FSM.AddGlobalTransition(eFSMTransition.Go_Dead, m_DeadState); m_FSM.AddState(m_WanderIdleState); m_FSM.AddState(m_WanderState); m_FSM.AddState(m_FleeState); m_FSM.AddState(m_CallArmyState); m_FSM.AddState(m_Chasestate); m_FSM.AddState(m_DodgeState); m_FSM.AddState(m_PatrolAttackstate); m_FSM.AddState(m_IdleState); m_FSM.AddState(m_FSMNoPlayerWanderIdleState); m_FSM.AddState(m_FSMNoPlayerWander); m_FSM.AddState(m_GetHurtState); m_FSM.AddState(m_DeadState); #endregion }
protected override void Start() { m_AIData = new MobInfo(); GameData.Instance.MobInfoTable[3100].CopyTo(m_AIData); m_MaxHp = m_AIData.m_fHp; base.Start(); m_MobAnimator = this.GetComponent <MobAnimationsController>(); m_BodyCollider = this.GetComponent <BoxCollider>(); m_DamageCollider = this.GetComponentInChildren <CapsuleCollider>(); m_FSM = new FSMSystem(m_AIData); m_AIData.m_Go = this.gameObject; m_AIData.m_FSMSystem = m_FSM; m_AIData.m_AnimationController = this.GetComponent <MobAnimationsController>(); m_AIData.navMeshAgent = this.GetComponent <NavMeshAgent>(); m_AIData.navMeshAgent.speed = Random.Range(6.5f, 7.0f); m_AIData.navMeshAgent.enabled = false; m_AIData.m_SoundManager = m_SoundManager; #region FSMMap FSMRespawnState m_RespawnState = new FSMRespawnState(); FSMChaseState m_Chasestate = new FSMChaseState(); FSMAttackState m_Attackstate = new FSMAttackState(); FSMIdleState m_IdleState = new FSMIdleState(); FSMWanderIdleState m_WanderIdleState = new FSMWanderIdleState(); FSMWanderState m_WanderState = new FSMWanderState(); m_RespawnState.AddTransition(eFSMTransition.Go_WanderIdle, m_WanderIdleState); m_Chasestate.AddTransition(eFSMTransition.Go_Attack, m_Attackstate); m_Attackstate.AddTransition(eFSMTransition.Go_Idle, m_IdleState); m_Attackstate.AddTransition(eFSMTransition.Go_Chase, m_Chasestate); m_IdleState.AddTransition(eFSMTransition.Go_Chase, m_Chasestate); m_IdleState.AddTransition(eFSMTransition.Go_Attack, m_Attackstate); m_WanderIdleState.AddTransition(eFSMTransition.Go_Wander, m_WanderState); m_WanderIdleState.AddTransition(eFSMTransition.Go_Chase, m_Chasestate); m_WanderState.AddTransition(eFSMTransition.Go_WanderIdle, m_WanderIdleState); m_WanderState.AddTransition(eFSMTransition.Go_Chase, m_Chasestate); FSMFishGetHurtState m_GetHurtState = new FSMFishGetHurtState(); FSMDeadState m_DeadState = new FSMDeadState(); m_GetHurtState.AddTransition(eFSMTransition.Go_Chase, m_Chasestate); m_GetHurtState.AddTransition(eFSMTransition.Go_Attack, m_Attackstate); m_DeadState.AddTransition(eFSMTransition.Go_Respawn, m_RespawnState); m_FSM.AddGlobalTransition(eFSMTransition.Go_WanderIdle, m_WanderIdleState); m_FSM.AddGlobalTransition(eFSMTransition.Go_FishGetHurt, m_GetHurtState); m_FSM.AddGlobalTransition(eFSMTransition.Go_Dead, m_DeadState); m_FSM.AddState(m_RespawnState); m_FSM.AddState(m_WanderIdleState); m_FSM.AddState(m_IdleState); m_FSM.AddState(m_Chasestate); m_FSM.AddState(m_Attackstate); m_FSM.AddState(m_GetHurtState); m_FSM.AddState(m_DeadState); m_FSM.AddState(m_WanderState); #endregion }
protected override void Start() { m_AIData = new MobInfo(); GameData.Instance.MobInfoTable[3400].CopyTo(m_AIData); m_SoundManager = this.GetComponent <SoundManager>(); SoundDataSetting Soundsetting = ResourceManager.m_Instance.LoadData(typeof(SoundDataSetting), "Sounds/Mobs/Tank", "SoundDataSetting") as SoundDataSetting; m_SoundManager.SetAudioClips(Soundsetting.SoundDatas); m_MaxHp = m_AIData.m_fHp; base.Start(); m_MobAnimator = this.GetComponent <MobAnimationsController>(); m_BodyCollider = this.GetComponent <BoxCollider>(); m_DamageCollider = GetComponentInChildren <CapsuleCollider>(); m_FSM = new FSMSystem(m_AIData); m_AIData.m_Go = this.gameObject; m_AIData.m_FSMSystem = m_FSM; m_AIData.m_AnimationController = this.GetComponent <MobAnimationsController>(); m_AIData.navMeshAgent = this.GetComponent <NavMeshAgent>(); m_AIData.navMeshAgent.speed = Random.Range(4.5f, 5.0f); m_AIData.navMeshAgent.enabled = false; m_AIData.m_SoundManager = m_SoundManager; FSMRespawnState m_RespawnState = new FSMRespawnState(); FSMChaseToRemoteAttackState m_ChaseToRemoteAttackState = new FSMChaseToRemoteAttackState(); FSMChaseToMeleeAttackState m_ChaseToMeleeAttackState = new FSMChaseToMeleeAttackState(); FSMAttackState m_Attackstate = new FSMAttackState(); FSMRemoteAttackState m_RemoteAttackstate = new FSMRemoteAttackState(); FSMTankIdleState m_TankIdleState = new FSMTankIdleState(); FSMWanderIdleState m_WanderIdleState = new FSMWanderIdleState(); FSMWanderState m_WanderState = new FSMWanderState(); m_RespawnState.AddTransition(eFSMTransition.Go_WanderIdle, m_WanderIdleState); m_ChaseToRemoteAttackState.AddTransition(eFSMTransition.Go_RemoteAttack, m_RemoteAttackstate); m_RemoteAttackstate.AddTransition(eFSMTransition.Go_TankIdle, m_TankIdleState); m_TankIdleState.AddTransition(eFSMTransition.Go_ChaseToRemoteAttack, m_ChaseToRemoteAttackState); m_TankIdleState.AddTransition(eFSMTransition.Go_RemoteAttack, m_RemoteAttackstate); m_TankIdleState.AddTransition(eFSMTransition.Go_ChaseToMeleeAttack, m_ChaseToMeleeAttackState); m_TankIdleState.AddTransition(eFSMTransition.Go_Attack, m_Attackstate); m_ChaseToMeleeAttackState.AddTransition(eFSMTransition.Go_Attack, m_Attackstate); m_ChaseToMeleeAttackState.AddTransition(eFSMTransition.Go_RemoteAttack, m_RemoteAttackstate); m_Attackstate.AddTransition(eFSMTransition.Go_TankIdle, m_TankIdleState); m_WanderIdleState.AddTransition(eFSMTransition.Go_ChaseToRemoteAttack, m_ChaseToRemoteAttackState); m_WanderIdleState.AddTransition(eFSMTransition.Go_Wander, m_WanderState); m_WanderState.AddTransition(eFSMTransition.Go_WanderIdle, m_WanderIdleState); FSMTankGetHurtState m_GetHurtState = new FSMTankGetHurtState(); FSMDeadState m_DeadState = new FSMDeadState(); m_GetHurtState.AddTransition(eFSMTransition.Go_ChaseToRemoteAttack, m_ChaseToRemoteAttackState); m_GetHurtState.AddTransition(eFSMTransition.Go_RemoteAttack, m_RemoteAttackstate); m_DeadState.AddTransition(eFSMTransition.Go_Respawn, m_RespawnState); m_FSM.AddGlobalTransition(eFSMTransition.Go_WanderIdle, m_WanderIdleState); m_FSM.AddGlobalTransition(eFSMTransition.Go_TankGetHurt, m_GetHurtState); m_FSM.AddGlobalTransition(eFSMTransition.Go_Dead, m_DeadState); m_FSM.AddState(m_RespawnState); m_FSM.AddState(m_ChaseToRemoteAttackState); m_FSM.AddState(m_ChaseToMeleeAttackState); m_FSM.AddState(m_Attackstate); m_FSM.AddState(m_RemoteAttackstate); m_FSM.AddState(m_TankIdleState); m_FSM.AddState(m_WanderIdleState); m_FSM.AddState(m_WanderState); m_FSM.AddState(m_GetHurtState); m_FSM.AddState(m_DeadState); }