public void Attack() { if (IsDied) { return; } if (m_isAttacking) { return; } Soldier defender = GM.GetAttacker(this); if (defender == null) { return; } if (defender.IsDied) { return; } StopPatrol(); StopEscape(); m_isAttacking = true; m_view.transform.LookAt(defender.View.transform.position); m_view.ShowAttack(m_data.AttackCD, delegate(){ float dis = Vector3.Distance(View.transform.position, defender.View.transform.position); if (dis > m_data.AttackDistance) { defender.Miss(); } else { defender.BeHurt(m_data.Attack + UnityEngine.Random.Range(-5, 5)); } }, delegate(){ m_isAttacking = false; } ); Debug.Log(m_data.ID.ToString() + ":attack..."); }