2012-10-08 9 views
6

Opracowuję prototyp małej gry w Unity 3.5.5f - w której gracz kontroluje mały umysł kontrolujący kosmitów. Gracz musi być w stanie przejąć kontrolę nad docelowym ludzkim NPC, przełączając wszystkie kamery i kontrolki na człowieka, o którym mowa.UNITY3D: Zmień sterowanie odtwarzacza na docelowy model (FPS)

N.B. Cały mój kod, do tej pory, jest w C#.

Mam dwa pomysły na temat postępu, który jest bardziej realny? (Cieszę się, że mogę wysłuchać alternatywnych pomysłów)

  1. Każdy człowiek na poziomie ma dezaktywowany skrypt kontrolera FPS (i towarzyszące mu skrypty). Skrypty te są aktywowane, gdy są kontrolowane (wyłączanie skryptów obcych na czas trwania).
  2. Odłącz bieżące skrypty od obcych i dołącz je do docelowego człowieka.

Plusy i minusy, o ile mi je wydawać:

  1. można mieć osobne obcych/ludzkie kontrolek skrypty (czyli nie trzeba używać członkowskim na wejście - na przykład może wystrzelić broń podczas gdy ludzki , zamiast walki wręcz jako obcy na LMB). Ta metoda jest bardzo godna zaufania.
  2. Ta metoda jest czysta, ale plik kodu dla odtwarzacza będzie znacznie większy, ponieważ nie mogę oddzielić kodu wejściowego tak łatwo.

EDYCJA: Przyjaciel wskazał, tak, NPC mają własne skrypty, które należy wyłączyć.

Odpowiedz

2

Jest to bardzo proste, w koncepcji. Wystarczy, że NPC będzie podobny do klasy gracza, ponieważ akceptuje kontrolę, gdy coś jest prawdą.
Na przykład:

class NPC { 
static bool isBeingControlled = false; 
public void OnUpdate() { 
    if (isBeingControlled) 
    { 
     //set camera position to NPC position (make sure you're using NPC as an instantiated class) 
     //accept key input WASD or whatever you are using and move NPC according to input. 
    } 
} 

}

Musisz instancję dla każdego NPC NPC masz w swojej grze.