Instancja ControllerManager zarządza symulowaną kontrolą ruchu dla swojego przypisanego RootPart .Wraz z ControllerPartSensors może być używany do budowy kontrolera postaci opartej na fizyce.
Ustawienie podstawowe
ControllerManager wymaga BasePart do użycia jako swojego korzenia. Siły ruchowe i wykrywanie części będą na tej części.
Grupuj część jako instancję Model dla organizacji wraz z innymi komponentami.
Dodaj instancję ControllerManager do modelu.Jeśli ControllerManager nie pojawia się początkowo w menu wstawiania obiektów, odznacz "Pokaż tylko zalecane obiekty" w ustawieniach wstawiania menu .
Ustawienie czujnika
A ControllerPartSensor wykrywa części z tym samym kodem, który Humanoid używa do wykrywania podłóg i drabin.
Wstaw ControllerPartSensor jako dziecko RootPart i zmień nazwę na GroundSensor dla łatwiejszej identyfikacji jej celu.Następnie, w oknie Właściwości, ustaw jego właściwość na 2, ale pozostaw jego jako podłogę.
Wstaw kolejny ControllerPartSensor jako dziecko RootPart i zmień nazwę na ClimbSensor .Następnie, w oknie Właściwości, ustaw jego właściwość na 1 i jego na drabinę.
Ustawienie kontrolera
Instancje kontrolera takie jak GroundController i ClimbController mówią zarządzanej części, jak interakować ze światem, pracując obok czujników, które skonfigurowałeś podczas instalacji czujnika.
Wstaw oba GroundController i ClimbController jako dzieci ControllerManager.
Wybierz nową instancję GroundController i następnie, w oknie Właściwości, ustaw jej właściwość GroundOffset na wartość, przy której część zarządzana powinna "wznosić się" nad ziemią.Ważne jest, aby ta wartość była mniejsza niż wartość SearchDistance dla czujnika gruntu, ponieważ ten czujnik zostanie dezaktywowany, jeśli straci zmysł ziemi i skutecznie zatrzyma swoje siły na części.
Odwołania do linków
Aby ukończyć podstawową konfigurację, musisz połączyć różne właściwości instancji ControllerManager z obiektami w głównej Model .
Wybierz instancjaControllerManager.
W oknie Właściwości, kliknij każdą z poniższych właściwości, a następnie, ponownie w oknie Eksplorator, kliknij odpowiednią instancję, aby ukończyć łączyć.
- Połącz właściwość ActiveController z instancją GroundController .
- Połącz właściwość RootPart z częścią, którą nazwałeś RootPart .
- Połącz właściwość ClimbSensor z instancją Sensor wspinania się .
- Połącz właściwość GroundSensor z instancją Sensora gruntowego .
Testuj
Z czujnikami i sterownikami w miejsce, a z odnośnikami powiązanymi możesz przetestować sterownik w Studio.
Rozpocznij testowanie gry za pomocą trybu Uruchom ( F8 ), ponieważ nie musisz wstawiać swojej postaci awatara w tym scenariuszu.
Korzeń części powinien unosić się nad ziemią przy wartości GroundController.GroundOffset ustawionej w Dodawaniu kontrolerów.Powinien również się obrócić, aby zgodzić się z wektorem ControllerManager.FacingDirection.
Eksperymentuj z różnymi kierunkami ruchu i skierowaniem poprzez zmianę wektorów MovingDirection i FacingDirection z ControllerManager podczas wykonywania programu.Również eksperymentuj z różnymi właściwościami instancji GroundController, takimi jak AccelerationTime , DecelerationTime i GroundOffset.
Menadżer kontrolera Kontroler naziemny
Własne czujniki
Opcje ControllerPartSensor.SensorMode i Floor oraz Ladder uruchamiają dokładny kod sensora Humanoid, umożliwiając ich użycie do odwrotnej kompatybilności.Jednak możesz również dostosować, w jaki sposób i kiedy wykrywane są chodzące i wspinające się części, ostatecznie zmieniając, kiedy zarządzana część chodzi/wspina się.
Przełącz ControllerPartSensor.UpdateType z Czytania na Ręczne .
- Po przeczytaniu uruchamia właściwości wyjścia, aby aktualizować odpowiednie do twojego każdorazowo, gdy je przeczytasz.Zasadniczo umieszcza czujnik w trybie "tylko odczytu", w którym wszystko, co piszesz do tych właściwości, zostaje zastąpione przez jego wewnętrzne zachowanie wykrywania.
- Manual wyłącza wewnętrzne zachowanie detekcji.Właściwości wyjściowe są wolne, abyś pisał, jak chcesz, a SensorMode nic nie robi.
Stwórz skrypt, który wykonuje własną logikę detekcji i zapisuje wyniki do właściwości wyjścia twojego sensora.Zazwyczaj użyjesz kwerendy przestrzennej, takiej jak WorldRoot:Raycast() lub WorldRoot:Blockcast(), która zwraca RaycastResult.Twój skrypt może wtedy wziąć właściwości wyniku i przypisać je odpowiednikom sensora:
Zauważ, że musisz zarządzać częstotliwością uruchamiania zapytania i aktualizować instancję instancja.
The ControllerManager będzie nadal używać czujników, które mu zostały przypisane, przyjmując dane, które mu przekazujesz.