【发布时间】:2016-12-07 21:47:48
【问题描述】:
前言 /* 我最近开始搞统一:像大多数人一样制作初学者的乒乓球游戏,我现在一直在尝试使用 3d 对象。我的想法是做一个塔防游戏,所以我有一个塔和一个临时目标假人。塔有一个脚本,它应该允许它找到最近的带有敌人标签的物体并画一条线,但这里有一个问题:*/
我的 GameObject.FindGameObjectsWithTag("Enemy") 函数返回一个空数组,尽管场景中有一个已标记且启用的对象。
public class Attack : MonoBehaviour
{
GameObject[] enemies;
float dist;
GameObject target = null;
bool targeted = false;
float range = 1000;
bool FindTarget()
{
bool found = false;
enemies = GameObject.FindGameObjectsWithTag("Enemy");
//print(GameObject.FindGameObjectsWithTag("Enemy"));
foreach (GameObject enemy in enemies)
{
float tmpd = Vector3.Distance(enemy.transform.position, transform.position);
if (tmpd <= range && dist > tmpd)
{
dist = tmpd;
target = enemy;
found = true;
}
}
return found;
}
// Update is called once per frame
void Update()
{
if (!targeted)
targeted = FindTarget();
else {
Debug.DrawLine(target.transform.position, transform.position, Color.red);
dist = Vector3.Distance(target.transform.position, transform.position);
if (dist > range)
targeted = false;
}
}
}
我已经查看了一千个其他线程,但找不到我的问题所在。任何帮助将不胜感激。
【问题讨论】:
-
这可能是个愚蠢的问题,但你100%确定敌人真的有那个确切的标签
-
这些对象是否启用 (
activeInHierarchy) ? -
是的,我也遇到过这种情况,所以我从字面上复制了文本以确保它是相同的。就我在检查器屏幕上看到的而言,它们已启用,所有刻度都已打勾,我还需要检查什么?
-
现在它可以工作了。我实际上并没有改变代码或场景中的任何内容。它刚刚决定开始工作。我不知道。