2016-08-28 4 views
0

Ich entwickle derzeit Multiplayer-FPS-Shooter, und ich bin auf Fahrzeugen fest.Unet. Multiplayer-Fahrzeuge

Ich habe diese "ClientRpc" Zeug, "Command" und so weiter versucht. Also Player hat Control-Skript, und dieses Skript hat die Funktion OnControllerColliderHit, wenn dies passiert, rufe ich void Disable();

in diesem Verfahren deaktivieren i alle Beschleunigern und einige Komponenten ich brauche nicht wie: Schießen, Bewegen, Kamera etc ...

im Grunde alles was ich brauche ist: einige Spieler Komponenten deaktivieren, wenn er bekommt im Auto. Skript funktioniert perfekt im Singleplayer, aber im Multiplayer sieht es wirklich komisch aus.

Ich habe auch gefragt, diese auf Antworten Unity, aber nicht hast:http://answers.unity3d.com/questions/1235436/(Skripte sind)

ps (wenn Sie mir ein paar mehr Infos oder Skripte müssen zu posten, nur kommentieren.)

Antwort

0

Ich denke, das Problem ist, dass Sie nur Komponenten auf dem Server aktivieren/deaktivieren. Befehle werden nur auf dem Server aufgerufen, daher sollten Sie möglicherweise RPC verwenden, um dasselbe in den Clients zu tun.

void Update() 
{ 
    //if there is driver in car then we can controll it. (it's a paradox for me, if there is driver and i am passanger i also can controll it lol.) 
    if(hasDriver) 
    { 
     GetComponent<carController>().enabled = true; 
    } 
    else 
    { 
     GetComponent<carController>().enabled = false; 
    } 
} 

//command function for sitting. in car. 
[Command] 
public void CmdSit(string _player) 
{ 
    //i increase how many people are in car 
    sitPlayers++; 

    cam.enabled = true; 
    //find player who sat there. 
    GameObject player = GameObject.Find(_player); 



    //i think you will get it >> 
    if (hasDriver) 
    { 
     player.transform.parent = Sitter.transform; 
     player.transform.position = Sitter.transform.position; 
     cam.GetComponent<AudioListener>().enabled = true; 


    } 
    else 
    { 
     player.transform.parent = Driver.transform; 
     hasDriver = true; 
     cam.GetComponent<AudioListener>().enabled = true; 
     player.transform.position = Driver.transform.position;    
    } 

    RpcSit(_player, hasDriver); 

} 

[ClientRpc] 
public void RpcSit(string _player, bool _driver) 
{ 
    cam.enabled = true; 
    //find player who sat there. 
    GameObject player = GameObject.Find(_player); 

    //i think you will get it >> 
    if (_driver) 
    { 
     player.transform.parent = Sitter.transform; 
     player.transform.position = Sitter.transform.position; 
     cam.GetComponent<AudioListener>().enabled = true; 
    } 
    else 
    { 
     player.transform.parent = Driver.transform; 
     cam.GetComponent<AudioListener>().enabled = true; 
     player.transform.position = Driver.transform.position; 
    } 
} 
Verwandte Themen