我创建了一个TileMap。我的敌人是一个带有"EnemyMover.cs“脚本的简单圆柱体,在按下游戏之前,它就在场景(等级)中。(运行时未实例化)
在一个单独的对象上,我有一个"TargetLocator“脚本,它试图利用GetComponent在运行时通过单击地图上的平铺来实例化柱面脚本组件。
public class TargetLocator : MonoBehaviour
{
[SerializeField] private Transform weapon;
private Transform target;
void Start()
{
target = GetComponent<EnemyMover>().transform;
}
void Update()
{
AimWeapon();
}
void AimWeapon()
{
weapon.LookAt(target);
}
}错误:
NullReferenceException:对象引用没有设置为对象TargetLocator.Start ()的实例(在资产/塔/TargetLocator.cs:12处)

我应该指出,我试图:
G 211
除刚体外,它们仍然返回空值,但这会导致物品从地板上掉下来,并且仍然不会瞄准敌人。
public class EnemyMover : MonoBehaviour
{
[SerializeField] private List<Waypoint> path = new List<Waypoint>();
[SerializeField] [Range(0f, 5f)] private float speed = 1f;
void Start()
{
StartCoroutine(FollowPath());
}
IEnumerator FollowPath()
{
foreach (Waypoint waypoint in path)
{
Vector3 startPos = transform.position;
Vector3 endPos = waypoint.transform.position;
float travelPercent = 0f;
// todo reintroduce when object can face
// transform.LookAt(endPos);
while (travelPercent < 1f)
{
travelPercent += Time.deltaTime * speed;
transform.position = Vector3.Lerp(startPos, endPos, travelPercent);
yield return new WaitForEndOfFrame();
}
}
}
}发布于 2021-05-30 23:26:12
不要使用transform (它是对象的真实位置),而是尝试调用该脚本中的方法。例如EnemyMover
public class EnemyMover: MonoBehaviour
{
private Transform target;
public Transform CalculateTarget()
{
target = GetComponent<Player>().transform;
return target;
}
}然后在TargetLocator中,您可以调用:
target = GetComponent<EnemyMover>().CalculateTarget();发布于 2021-05-31 04:53:36
它看起来不像TargetLocator附加到--与EnemyMover相同的 GameObject。
你说你自己
在一个单独的对象上,我有一个"TargetLocator“脚本,它试图利用GetComponent在运行时通过单击地图上的一个平铺来实例化柱面脚本组件。
Component.GetComponent在给定的Component (从它继承的MonoBehaviour)实例上查找组件。在您的例子中,this ->是TargetLocator本身的引用。
您更希望使用例如FindObjectOfType,它在场景层次结构中的任何对象上查找给定类型的组件。
target = FindObjectOfType<EnemyMover>().transform;https://stackoverflow.com/questions/67766505
复制相似问题