falsche Beschreibung:
Verwenden Sie [HideInInspector] für eine öffentliche Variable in einem Skript ( Bird.css ) ( [HideInInspector] bewirkt, dass die Variable nicht im Inspector angezeigt, sondern serialisiert wird. ), die zum Abrufen der SpringJoint2D- Komponente des 2D-Objekts verwendet wird. Verweisen Sie auf diese Komponentenvariable in einem anderen Skript (GameManager.css). Beim Ausführen des Spiels tritt ein Fehler auf, dass der Wert der Variablen nicht abgerufen wurde.
Definition:
//Bird.css
//获取spring joint 2D组件
//[HideInInspector]使变量不显示在 Inspector 中,但进行序列化。
[HideInInspector]
public SpringJoint2D sp;
Zitieren:
//GameManager.css
void Instante()
{
...
birds[i].sp.enabled = false;
...
}
Fehlergrund:
Da die Methode Instante() zu Beginn einmalig aufgerufen werden muss, wird die Call-Anweisung in start() geschrieben und auch die Erfassung von SpringJoint2D in start() definiert.
//Bird.css
void Start()
{
sp = GetComponent<SpringJoint2D>();
...
}
//GameManager.css
void Start()
{
//初始化
Instante();
}
Die start()-Methode wird einmal vor update() aufgerufen, und die start() der beiden Skripte werden am Anfang ausgeführt, was schließlich zur Ausführung der Instante()-Methode führt.GameManager.css bekommt die SpringJoint2D nicht erhalten in Bird.css-Komponenten.
Lösung:
Die Awake()-Methode wird zuerst in Unity aufgerufen, sodass die SpringJoint2D-Komponentenerfassung in Awake() platziert werden kann und die Instante()-Methode weiterhin in start() platziert werden kann.
//Bird.css
private void Awake()
{
sp = GetComponent<SpringJoint2D>();
}