我有一个用于控制目标敌人的脚本和另一个用于控制玩家攻击的脚本,目标脚本似乎可以自行正常工作,直到第一个目标被杀死,所以当我单击 Tab 时,它会按距离顺序瞄准我的敌人,但是当我的第一个目标死了,它不能针对另一个目标,我收到消息:
MissingReferenceException:“Transform”类型的对象已被破坏,但您仍在尝试访问它。您的脚本应该检查它是否为空,或者您不应该销毁该对象。
此外,我无法攻击除了第一个玩家之外的任何东西,无论它是否被瞄准。我尝试切换我的 playerattacks,以便它使用一个列表,就像我的目标脚本一样,但是我得到了所有相同的错误。
我的目标脚本是:
public class Targetting : MonoBehaviour {
public List<Transform> targets;
public Transform selectedTarget;
public string targetTag = "Enemy";
private Transform myTransform;
//Use this for initialization
void Start () {
targets = new List<Transform>();
selectedTarget = null;
myTransform = transform;
AddAllEnemies();
}
public void AddAllEnemies() {
GameObject[] go = GameObject.FindGameObjectsWithTag(targetTag);
foreach(GameObject enemy in go) {
AddTarget(enemy.transform);
}
}
public void AddTarget(Transform enemy) {
targets.Add(enemy);
}
private void SortTargetsByDistance() {
targets.Sort(delegate(Transform t1, Transform t2) {
return (Vector3.Distance(t1.position, myTransform.position).CompareTo)
(Vector3.Distance(t2.position, myTransform.position));
});
}
private void TargetEnemy() {
if(selectedTarget == null) {
SortTargetsByDistance();
selectedTarget = targets[0];
} else {
int index = targets.IndexOf(selectedTarget);
if (index < targets.Count -1) {
index++;
} else {
index = 0;
}
selectedTarget = targets[index];
}
}
//Update is called once per frame
void Update ()
{
if(Input.GetKeyDown(KeyCode.Tab))
{
TargetEnemy();
}
}
}
我的 PlayerAttack 脚本目前是:
public class PlayerAttack : MonoBehaviour {
public enemyHealth eHealth;
public GameObject enemy;
private float MHCD; // MeleeHit CD
private float hitChance;
// Use this for initialization
void Start () {
}
void Update () {
hitChance = Random.Range (1, 100);
if (Input.GetKeyDown (KeyCode.Alpha1) && Time.time - MHCD > 1) {
if (hitChance > 0 && hitChance < 90) {
Attack1 ();
MHCD = Time.time;
}
}
}
void Attack1() {
float distance = Vector3.Distance (enemy.transform.position, transform.position);
if (distance < 4) {
eHealth.SendMessage ("MeleeHit");
} else {
Debug.LogWarning ("You are too far away!");
}
}
}
基本上我要做的是让两个脚本相互配合,这样当一个敌人成为目标时,它只会减少目标敌人的伤害,当一个敌人被杀死时,它会从“目标”列表中删除