Referenzen im Inspector
Teil des Abschnitts Grundlagen des Scripting in Unity der Unity-Journey von Coddy. Lektion 29 von 67.
Ein Feld kann ein anderes Objekt enthalten. Gib ihm einen Typ wie Transform oder GameObject, und der Inspector zeigt ein leeres Feld an, das du füllst, indem du ein Objekt aus der Hierarchy darauf ziehst. Dieses Kamerascript folgt dem Objekt, das in player gezogen wurde, und bleibt dabei 3 Einheiten darüber und 6 dahinter:
public Transform player;
void Update()
{
transform.position = player.position + new Vector3(0, 3, -6);
}Ein leeres Feld zeigt None an, und die erste Zeile, die es verwendet, löst in jedem Frame folgende Ausnahme aus: UnassignedReferenceException: The variable player of CameraFollow has not been assigned. In der nächsten Zeile der Meldung steht, was zu tun ist: You probably need to assign the player variable of the CameraFollow script in the inspector. Sie nennt das Feld und das Script, sodass du weißt, welches Feld du füllen musst.
Manche Scripts sollten auch funktionieren, wenn das Feld leer ist. Unity lässt ein leeres Feld mit null vergleichen, daher prüft ein solches Script dies, bevor es das Feld verwendet. Wenn du die Zeile in Update() mit if (player != null) umschließt, bleibt eine Kamera ohne Player an ihrer Position, anstatt eine Ausnahme auszulösen.
Aufgabe
MittelJeder Wächter geht zu seinem eigenen Posten. In der Szene weist der Inspector von Guard1 das Objekt Post1 einem Feld namens post zu. Der Posten von Guard2 ist noch nicht erstellt, daher ist sein post-Feld leer.
- Füge dem Guard-Skript ein
Transform-Feld namensposthinzu. - Ein Wächter geht mit einer Geschwindigkeit von
speedEinheiten pro Sekunde zur Position seines Postens und bleibt dort stehen, selbst wenn der Posten später verschoben wird. - Ein Wächter, dessen Posten-Feld leer ist, bleibt an seinem Platz, ohne dass ein Fehler auftritt.
Drücke Play, wähle jeden Wächter in der Hierarchy aus, um sein Posten-Feld zu sehen, und klicke dann auf Check.
Probier es selbst
using UnityEngine;
public class Guard : MonoBehaviour
{
// post: der Transform, zu dem diese Wache geht; wird im Inspector festgelegt
public float speed = 2f;
void Update()
{
// Gehe mit speed zum post. Eine Wache mit einem leeren post-Feld bleibt stehen.
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen des Scripting in Unity
1Dein erstes Skript
Hallo, UnityPlatziere den WürfelBewege dich in jedem FrameDrehe dich jede SekundeSteuere mit den TastenRückblick: Steuere den Würfel4Vektoren
Vektoren addierenRichtungenLokaler und globaler RaumDiagonale GeschwindigkeitAbstand zwischen ObjektenVector3 ist ein StructRückblick: Drohnenpilot7Projekt: Fang den Stern
Der FängerEin fallender Stern10Der Lebenszyklus eines Skripts
Awake und StartUpdate und LateUpdateOnEnable und OnDisableDie Reihenfolge im LebenszyklusRückblick: Lifecycle Logger5Transformationen und Hierarchie
Eltern und KinderSkalierungDinge ansehenAuf einen Punkt zubewegenRückblick: Umlaufender Mond8Dinge finden
Nach Namen findenTagsNach Typ findenReferenzen schlagen FindUnitys NullRückblick: Nächste Münze11Projekt: Weiche den Blöcken aus
Der LäuferFallende Blöcke6GameObjects und Komponenten
Referenzen im InspectorEine Komponente abrufenFehlende KomponentenEine Komponente hinzufügenRequireComponentEin- und AusblendenRückblick: Lichtschalter