void Awake(){ m_Instance = this; //m_AIData初始化 m_AIData.fspeed = 20.0f; m_AIData.fMaxspeed = m_fMaxSpeed; m_AIData.frotate = 0.0f; m_AIData.fMaxrotate = 10.0f; m_AIData.fColProbe = 2.0f; m_AIData.thisPoint = this.gameObject; m_AIData.targetPoint = targetPoint; m_AIData.m_Obs = SceneManager.m_Instance.m_Obs; m_AIData.m_Wall = SceneManager.m_Instance.m_Wall; m_AIData.fRadius = 0.5f; m_AIData.iAstarIndex = -1; m_AIData.targetPosition = Vector3.zero; m_AIData.fDetectLength = 10.0f; m_AIData.fAttackLength = 5.0f; m_AIData.fAttack = 10.0f; m_AIData.fSkill = 30.0f; m_AIData.iLV = 1; m_AIData.iEXP = 0; m_AIData.fHP = fHP; m_AIData.fMP = fMP; m_AIData.fMaxHP = fMaxHP; m_AIData.fMaxMP = fMaxMP; //FSM的設定 m_FSMManager = new FSMManager (); FSMIdleState IdleState = new FSMIdleState (); m_FSMManager.AddState (IdleState); m_AIData.m_State = m_FSMManager; }
// Use this for initialization void Start() { m_AStar = this.GetComponent<AStar>(); ; //m_AIData初始化 m_AIData.fspeed = 20.0f; m_AIData.fMaxspeed = m_fMaxSpeed; m_AIData.frotate = 0.0f; m_AIData.fMaxrotate = 10.0f; m_AIData.fColProbe = 2.0f; m_AIData.thisPoint = this.gameObject; m_AIData.targetPoint = targetPoint; m_AIData.m_Obs = SceneManager.m_Instance.m_Obs; m_AIData.m_Wall = SceneManager.m_Instance.m_Wall; m_AIData.fRadius = 0.5f; m_AIData.iAstarIndex = -1; m_AIData.targetPosition = Vector3.zero; m_AIData.fDetectLength = 20.0f; m_AIData.fAttackLength = 10.0f; m_AIData.fHP = 100.0f; m_AIData.fMP = 30.0f; m_AIData.fAttack = 10.0f; m_AIData.fSkill = 30.0f; //FSM的設定 m_FSMManager = new FSMManager(); FSMIdleState IdleState = new FSMIdleState(); //FSMTrackState TrackState = new FSMTrackState (); //FSMChaseState ChaseState = new FSMChaseState (); //FSMAttackState AttackState = new FSMAttackState (); //FSMWanderState WanderState = new FSMWanderState (); //IdleState.AddTransition (eTransitionID.Idle_To_Track, eStateID.Track); //IdleState.AddTransition (eTransitionID.Idle_To_Chase, eStateID.Chase); //IdleState.AddTransition (eTransitionID.Idle_To_Attack, eStateID.Attack); //IdleState.AddTransition (eTransitionID.Idle_To_Wander, eStateID.Wander); //TrackState.AddTransition (eTransitionID.Track_To_Idle, eStateID.Idle); //TrackState.AddTransition (eTransitionID.Track_To_Chase, eStateID.Chase); //TrackState.AddTransition (eTransitionID.Track_To_Attack, eStateID.Attack); //TrackState.AddTransition (eTransitionID.Track_To_Wander, eStateID.Wander); //ChaseState.AddTransition (eTransitionID.Chase_To_Attack, eStateID.Attack); //ChaseState.AddTransition (eTransitionID.Chase_To_Idle, eStateID.Idle); //AttackState.AddTransition (eTransitionID.Attack_To_Idle, eStateID.Idle); //AttackState.AddTransition (eTransitionID.Attack_To_Chase, eStateID.Chase); //WanderState.AddTransition (eTransitionID.Wander_To_Idle, eStateID.Idle); m_FSMManager.AddState(IdleState); //m_FSMManager.AddState (TrackState); //m_FSMManager.AddState (ChaseState); //m_FSMManager.AddState (AttackState); //m_FSMManager.AddState (WanderState); m_AIData.m_State = m_FSMManager; }
// 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); }
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 }
public override void Init() { base.Init (); m_ColliderLayerMask = 1 << (int)TDCEnum.ELayer.LayerCreature | 1 << (int)TDCEnum.ELayer.LayerEnviroment | 1 << (int)TDCEnum.ELayer.LayerGObject | 1 << (int)TDCEnum.ELayer.LayerItem | 1 << (int)TDCEnum.ELayer.LayerPlayer; var idleState = new FSMIdleState(this); var moveState = new FSMMoveState(this); var findRandomState = new FSMFindRandomState(this); var avoidState = new FSMAvoidState(this); var flyAvoidState = new FSMFlyAvoidState(this); var chaseState = new FSMChaseState(this); var attackState = new FSMAttackState(this); var dieState = new FSMDieState(this); var flyState = new FSMFlyState(this); var landingState = new FSMLandingState(this); var wildModeState = new FSMWildModeState(this); var petModeState = new FSMPetModeState(this); var followState = new FSMFollowState(this); var flyFollowState = new FSMFlyFollowState(this); var flyHomeState = new FSMFlyHomeState(this); var landingHomeState = new FSMLandingHomeState(this); var goHomeState = new FSMGoHomeState(this); m_FSMManager.RegisterState("IdleState", idleState); m_FSMManager.RegisterState("MoveState", moveState); m_FSMManager.RegisterState("FindRandomState", findRandomState); m_FSMManager.RegisterState("AvoidState", avoidState); m_FSMManager.RegisterState("ChaseState", chaseState); m_FSMManager.RegisterState("AttackState", attackState); m_FSMManager.RegisterState("DieState", dieState); m_FSMManager.RegisterState("FlyAvoidState", flyAvoidState); m_FSMManager.RegisterState("FlyState", flyState); m_FSMManager.RegisterState("LandingState", landingState); m_FSMManager.RegisterState("WildModeState", wildModeState); m_FSMManager.RegisterState("PetModeState", petModeState); m_FSMManager.RegisterState("FollowState", followState); m_FSMManager.RegisterState("FlyFollowState", flyFollowState); m_FSMManager.RegisterState("GoHomeState", goHomeState); m_FSMManager.RegisterState("FlyHomeState", flyHomeState); m_FSMManager.RegisterState("LandingHomeState", landingHomeState); m_FSMManager.RegisterCondition("IsActive", GetActive); m_FSMManager.RegisterCondition("MoveToTarget", MoveToTarget); m_FSMManager.RegisterCondition("MoveToEnemy", MoveToEnemy); m_FSMManager.RegisterCondition("FoundEnemy", FoundEnemy); m_FSMManager.RegisterCondition("IsDeath", IsDeath); m_FSMManager.RegisterCondition("IsToFarGroup", IsToFarGroup); m_FSMManager.RegisterCondition("IsToFarStartBattlePosition", IsToFarStartBattlePosition); m_FSMManager.RegisterCondition("IsToFarStartPosition", IsToFarStartPosition); m_FSMManager.RegisterCondition("IsToFarLeaderPosition", IsToFarLeaderPosition); m_FSMManager.RegisterCondition("FoundFood", FoundFood); m_FSMManager.RegisterCondition("IsEnemyDeath", IsEnemyDeath); m_FSMManager.RegisterCondition("IsLandingFinish", IsLandingFinish); m_FSMManager.RegisterCondition("HaveLeader", HaveLeader); m_FSMManager.RegisterCondition("HaveEnemyByLeader", HaveEnemyByLeader); m_FSMManager.RegisterCondition("IsLeaderDeath", IsLeaderDeath); }