我正在创建河内之塔拼图的一个版本。它在Unity层次结构中的表示方式是
-游戏对象
----- PEGA
---------手臂
--------- Base
对不起,我不知道如何表示层次结构。
场景中有3个“钉”和7个“环”作为对象。钉子和戒指在层次结构中处于同一级别。
很明显,我可以在ring类中“ SerializeField”,只需在检查器中单击并将每个Peg拖到它们上,但是我要做的就是在运行时在代码中添加它们。这就是我尝试过的。
这是我的环课的一部分
public class ring : MonoBehaviour
{
public bool locked, resting;
private float startX, startY, deltaX, deltaY;
private Vector3 mousePos, beforeDrag;
private List<GameObject> pegs;
// Start is called before the first frame update
void Start()
{
startX = transform.position.x;
startY = transform.position.y;
locked = false;
pegs.Add(GameObject.Find("PegA"));
pegs.Add(GameObject.Find("PegB"));
pegs.Add(GameObject.Find("PegC"));
}
}
我得到的错误是“对象引用未设置为对象的实例”
有人可以解释吗?
答案 0 :(得分:6)
public class ring : MonoBehaviour
{
//These are value types they have a default value
public bool locked, resting;// bool default value is false
private float startX, startY, deltaX, deltaY; // float is zero
private Vector3 mousePos, beforeDrag;// Vector3 is Vector3.zero
// This does not have a "default" value cos this is a reference type
private List<GameObject> pegs = new List<GameObject>();
// Start is called before the first frame update
void Start()
{
startX = transform.position.x;
startY = transform.position.y;
locked = false;
pegs.Add(GameObject.Find("PegA"));
pegs.Add(GameObject.Find("PegB"));
pegs.Add(GameObject.Find("PegC"));
}
}
结论:您应该初始化自己的类,并且通常使用new关键字来初始化类。除非这些类是从MonoBehaviour继承的类,否则应使用AddComponent
方法初始化这些类。如果您不这样做,那么Unity将不会管理这些类的内存,并且会告诉您使用AddComponent的错误。