protected virtual void Awake() { if (m_NavMeshAgent == null) { m_NavMeshAgent = GetComponent <NavMeshAgent>(); } if (m_Nameplate != null) { UnitNameplate nameplate = Instantiate(m_Nameplate); nameplate.parent = this; } if (m_Skills == null) { m_Skills = new List <Skill>(); } else { foreach (GameObject skillPrefab in m_SkillPrefabs) { if (skillPrefab.GetComponent <ICastable <IUsesSkills> >() == null) { m_SkillPrefabs.Remove(skillPrefab); } } for (int i = 0, j = 0; i < m_SkillPrefabs.Count; ++i) { m_Skills.Add(new Skill()); m_Skills[j].skillIndex = j; m_Skills[j].skillData = m_SkillPrefabs[i].GetComponent <ICastable <IUsesSkills> >().skillData.Clone(); m_Skills[j].skillData.skillIndex = j; m_Skills[j].skillPrefab = m_SkillPrefabs[i].gameObject; m_Skills[j].parent = this; ++j; } } //GetComponent<NavMeshAgent>().updateRotation = false; m_MovementFSM = new FiniteStateMachine <MovementState>(); m_DamageFSM = new FiniteStateMachine <DamageState>(); m_DamageFSM.AddTransition(DamageState.Init, DamageState.Idle); m_DamageFSM.AddTransitionFromAny(DamageState.Dead); m_MovementFSM.Transition(MovementState.Idle); m_DamageFSM.Transition(DamageState.Idle); Publisher.self.Subscribe(Event.UpgradeSkill, OnUpgradeSkill); Publisher.self.Subscribe(Event.UseSkill, OnUseSkill); }