Max*_*tax -2 c# unity-game-engine
我正在创建一个版本的河内塔拼图。它在 Unity 层次结构中的表示方式是
-游戏对象
-----PegA
---------Arm
---------Base
抱歉,我不知道如何表示层次结构。
场景中有 3 个“钉子”和 7 个“环”作为对象。钉和环在层次结构中处于同一级别。
很明显,我可以“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"));
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是“对象引用未设置为对象的实例”
有人可以解释一下吗?
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"));
}
}
Run Code Online (Sandbox Code Playgroud)
结论您应该初始化您自己的类,并且通常使用 new 关键字初始化类。除非这些是从 MonoBehaviour 继承的类,否则应使用该AddComponent方法初始化这些类。如果您不执行这些操作,Unity 将不会管理这些类的内存,并且会提示您使用 AddComponent 的错误。
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |