GameObject[] rm = FindObjectsOfTypeAll(typeof(RoadMovement)) as GameObject[];
if (Input.GetKeyDown (KeyCode.LeftArrow))
{
foreach(GameObject r in rm) //objectRefrence not set to instance of an object error here
{
var bounds1 = r.renderer.bounds;
var bounds2 = player.renderer.bounds;
Transform roadtransform = r.transform;
if(bounds1.Intersects(bounds2))
{
if (this.transform.position.x > r.renderer.bounds.min.x)
this.transform.position = new Vector3 (this.transform.position.x - 0.6f, this.transform.position.y, this.transform.position.z);
}
}
}
FindObjectOfType
和FindObjectOfTypeAll
之间有什么区别?我想获取附有RoadMovement脚本的所有对象。我理解错误:Object reference not set to an instance
但不知道如何解决这个问题?
答案 0 :(得分:2)
第一个问题:FindObjectsOfTypeAll
已被弃用了很长时间,并且在当前版本的Unity中根本不再记录。因为您要比较场景中的对象,所以看起来您需要Object.FindObjectsOfType
。
第二个问题:您正在进行的查找调用并不返回GameObject数组,因此as
运算符将在强制转换失败时返回null。您提到RoadMovement
是您编写的行为脚本。这意味着每个RoadMovement 都有一个GameObject,但并不是每个RoadMovement 都是一个GameObject。
这也是您获得InvalidCastException以及asking about的原因。了解您的退货类型,您将了解错误。
最近的Unity版本甚至添加了FindObjectsOfType
的通用版本:
RoadMovement[] roadMovements = Object.FindObjectsOfType<RoadMovement>();
foreach (RoadMovement roadMovement in roadMovements) {
GameObject myGameObject = roadMovement.gameObject;
//do something
}