实例化中的 Unity3D 空引用
本文关键字:引用 Unity3D 实例化 | 更新日期: 2023-09-27 18:31:48
对象引用未设置为对象的实例"错误仍然显示。
我尝试了每个变量的Debug.Log,没有错误。
这是我的代码:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class PlatformSpawn : MonoBehaviour {
public GameObject platform;
public GameObject life;
private Vector3 platformrotation;
private Vector2 platformpoint, lifepoint;
private float platformrange, liferange;
public List<Vector2> SpawnList = new List<Vector2> ();
void Update () {
float randposition = Random.Range (-10f, 10f); //x-axis
platformrange -= 5; //y-axis
float randrotation = Random.Range(-20f, 20f); //z-axis rotation
liferange = platformrange + 1.56f;
platformpoint = new Vector2 (randposition, platformrange);
platformrotation = new Vector3 (0f, 0f, randrotation);
lifepoint = new Vector2 (randposition, liferange);
SpawnList.Add (platformpoint);
GameObject Tlife = (GameObject)Instantiate (life, life.transform.position, life.transform.rotation);
GameObject Tplatform = (GameObject)Instantiate (platform, platform.transform.position, platform.transform.rotation);
Tlife.transform.position = lifepoint;
Tplatform.transform.position = platformpoint;
if (SpawnList.Count >= 10) {
Tplatform.transform.rotation = Quaternion.Euler (platformrotation);
}
}
}
错误在
游戏对象 Tlife = (GameObject)Instanceiate (life, 生命.转换.位置, 生命.转换.旋转);
谢谢 4 的帮助 ^_^
附言预制件仍在实例化,没有任何问题...
life
必须是已在编辑器中创建并拖放到此对象的检查器窗口中的预制件。
确保您:
- 已创建预制件
- 在编辑器中选择了此对象,因此检查器将显示
- 将该预制件拖放到检查器中的"生活"字段中
Instantiate(Object original, Vector3 position, Quaternion rotation)
- 使用 Instantiate(Object original)
在这种情况下,您正在尝试访问尚不存在的对象的位置和旋转(因此为 null 引用)。您正在尝试实例化life
并且在实例化时告诉它在其位置"生成"它 - 这是没有意义的。
使用 Instantiate(Object original)
将使用预制件中指定的位置和旋转实例化您的对象 - 无论如何,这就是您要尝试执行的操作。
不幸的是,Unity 的文档似乎并没有真正说明 Instance 的后者重载,主要解释了前者的工作原理:http://docs.unity3d.com/ScriptReference/Object.Instantiate.html
编辑:还要检查您是否在检查器中明确分配了预制件,否则您仍然会遇到问题,因为life
没有引用任何内容。
我想你们中的一些人还没有看过最后一部分,
附言预制件仍在实例化,没有任何问题...
这是个问题...预制件仍在实例化,就像根本没有问题一样,但问题是错误仍然"出现"
我在这里猜测这是来自 Unity3D 的错误,所以我再次使用了 Debug.Log(life),它表明它确实为空......
我在 life 变量中附加了一个预制件,甚至 OnCollisionEnter2D 仍在工作......
我还找到了一种方法来消除错误并仍然实例化;
Private GameObject life;
void Start(){
life = new GameObject("name of the object");
//then attach some components for the new game object...
}
我用 Collider2D 试过了它并且它有效,我仍然在寻找一种方法来附加带有精灵的精灵渲染器......
但是,仍然感谢您的帮助 ^_^