Die ControllerManager Instanz verwaltet die simulierte Bewegungssteuerung für ihren zugewiesenen RootPart . Zusammen mit ControllerPartSensors kann sie verwendet werden, um einen physikalisch basierten Charakter-Controller zu erstellen.
Kern-Einstellungen
ControllerManager benötigt einen BasePart als Wurzel. Bewegungskräfte und Teil-S感應 werden auf dieser Teil sein.
Gruppiere das Teil als Model Instanz für die Organisation zusammen mit den anderen Komponenten.
Fügen Sie eine Class.ControllerManager -Instanz dem Modell hinzu. Wenn Class.ControllerManager nicht im Objekt-Einserungsmenü erscheint, deaktivieren Sie uncheck "Nur empfohlene Objekte anzeigen" in den Einstellungen des Menüs Zurücklegen .
Sensor-Einstellungen
Ein ControllerPartSensor erkennt Teile mit dem selben Code, den Humanoid für die Erkennung von Böden und Treppen verwendet.
Fügen Sie ein ControllerPartSensor als Kind von RootPart und benennen Sie es GroundSensor für eine einfachere Identifizierung seines Zwecks. Dann, im 1> Eigenschaften-Fenster1>, setzen Sie seine
Fügen Sie einen weiteren ControllerPartSensor als Kind von RootPart und benennen Sie ihn ClimbSensor . Dann, in dem 1> Eigenschaften-Fenster1>, setzen Sie seine 4> Class.ControllerPartSensor.SearchDistance|SearchDistance
Controller-Einstellungen
Controller-Instanzen wie GroundController und ClimbController sagen dem verwalteten Teil, wie man mit der Welt interagiert, indem sie die Sensoren einschließlich der Sensoren konfiguriert, die Sie in Sensor-Einstellungen konfiguriert haben.
Füge beide ein GroundController und ClimbController als Kinder des ControllerManager ein.
Wählen Sie die neue GroundController Instanz und dann, im Eigenschaften-Fenster, setzen Sie seine GroundOffset Eigenschaft auf einen W
Verweise auf Referenzen
Um das Kern-Setup abzuschließen, musst du verschiedene Eigenschaften der ControllerManager Instanz mit Objekten innerhalb der Haupt-Model verknüpfen.
Wählen Sie die ControllerManager Instanz.
In dem Eigenschaften-Fenster, klicken Sie auf jede der folgenden Eigenschaften und dann, zurück im Explorer-Fenster, klicken Sie auf die entsprechende Instanz, um den verlinkenabzuschließen.
- Verknüpfen Sie die Eigenschaft ActiveController mit der Instanz GroundController .
- Verknüpfen Sie die RootPart Eigenschaft mit dem Teil, den Sie RootPart nannten.
- Verknüpfen Sie die ClimbSensor-Eigenschaft mit der ClimbSensor-Instanz.
- Verknüpfen Sie die GroundSensor-Eigenschaft mit der GroundSensor-Instanz.
Testen
Mit Sensoren und Steuerelementen und mit Verweisen auf in Studio kannst du den Controller testen.
Starten Sie einen Spieltest mit dem Run-Modus ( F8 ) , da Sie Ihren Avatar-Charakter in diesem Szenario nicht einfügen müssen.
RootPart sollte über dem Boden bei dem GroundController.GroundOffset Wert, den du in Hinzufügen von Controllern eingibst, auf der 0> Class.ControllerManager.FacingDirection0> Ebene drehen. Es sollte auch um die Ausrichtung mit dem 3> Class.ControllerManager.FacingDirectionVektorkraftdrehen.
Experimentieren Sie mit verschiedenen Bewegungs- und Ausrichtungsrichtungen, indem Sie die MovingDirection und Class.ControllerManager
Benutzerdefinierte Sensoren
Die ControllerPartSensor.SensorMode-Optionen von Floor und Ladder laufen den genauen 2>Class.Humanoid Codes, sodass Sie ihn für die Rückwärtsskompatibilität verwenden können. Sie können jedoch auch anpassen, wie und wann walkable und climbable Teile erkannt werden
Wechseln Sie den ControllerPartSensor.UpdateType von OnRead zu Manuell .
- OnRead trifft die Ausgabe属性, die entsprechen Ihrem SensorMode jedes Mal, wenn Sie sie lesen. Es stellt im Grunde den Sensor in einen "nur-Lese-Modus" ein, bei dem alles, was Sie auf diese Eigenschaften schreiben, durch ihr internes Senseverhalten überschrieben wird.
- Manuell schaltet das interne Sensorverhalten aus. Die Ausgabe属性 sind für Sie frei zu schreiben, wie Sie möchten, und die SensorMode tut nichts.
Erstellen Sie ein Skript, das Ihre eigene Sensings-Logik ausführt und die Ausgaben an Ihre Sensor-Ausgabe-Eigenschaften schreibt. Normalerweise verwenden Sie eine Raumquerweis wie WorldRoot:Raycast() oder WorldRoot:Blockcast(), die ein RaycastResult zurückgibt. Ihr Skript kann dann die Eigenschaften des Ergebnisses auf
Beachten Sie, dass Sie die Häufigkeit, mit der Ihre Anfragen ausgeführt werden und wie oft ihre Sensor-Instanz aktualisiert wird, verwalten müssen.
Der ControllerManager wird weiterhin die von ihm zugewiesenen Sensoren verwenden, indem er die Daten, die Sie ihm übermitteln, erhält.