2017-10-22 2 views
-2

Wie kann ich den C# Code bearbeiten, um anzuzeigen, dass Spieler 1 oder 2 gewonnen hat, wenn der andere Spieler stirbt. Und den toten Spieler zeigen, den sie verloren haben?Unity C# Simple Multiplayer Spielende

PlayerController Script

using System.Collections.Generic; 

using UnityEngine; 

using UnityEngine.Networking; 

namespace S3 
{ 
public class PlayerController : NetworkBehaviour { 

    public GameObject bulletPrefab; 
    public Transform bulletSpawn; 

// Update is called once per frame 
void Update() 
{ 
    if (!isLocalPlayer) { 
     return; 
    } 

    float x = Input.GetAxis ("Horizontal") * Time.deltaTime * 150.0f; 
    float z = Input.GetAxis ("Vertical") * Time.deltaTime * 3.0f; 

    transform.Rotate (0, x, 0); 
    transform.Translate (0, 0, z); 

     if (Input.GetKeyDown (KeyCode.Space)) 
     { 
      CmdFire(); 
     } 
} 

    [Command] 
    void CmdFire() 
    { 
     GameObject bullet = (GameObject) Instantiate(bulletPrefab, bulletSpawn.position, bulletSpawn.rotation); 

     bullet.GetComponent<Rigidbody>().velocity = bullet.transform.forward * 6.0f; 

     NetworkServer.Spawn(bullet); 

     Destroy (bullet, 2); 
    } 

    public override void OnStartLocalPlayer() 
     { 
    GetComponent<MeshRenderer>().material.color = Color.blue; 
    } 


} 
} 

Gesundheit Script

using System.Collections; 
using UnityEngine; 
using UnityEngine.UI; 
using UnityEngine.Networking; 

namespace S3 
{ 
    public class Health : NetworkBehaviour { 

     public const int maxHealth = 100; 
     [SyncVar (hook = "OnChangeHealth")]public int currentHealth = maxHealth; 
     public RectTransform healthbar; 

     public void TakeDamage(int amount) 
     { 
     if (!isServer) 
     { 
      return; 
     } 

     currentHealth -= amount; 
     if (currentHealth <= 0) 
     { 
      currentHealth = maxHealth; 
      RpcRespawn(); 
     } 
    } 

    void OnChangeHealth(int health) 
    { 
     healthbar.sizeDelta = new Vector2(health * 2, healthbar.sizeDelta.y); 
    } 


    [ClientRpc] 
    void RpcRespawn() 
    { 
     if(isLocalPlayer) 
     { 
      transform.position = Vector3.zero; 
     } 
    } 
    } 
} 

Dies ist die codeaspğlasdlişsadlşisadlşiadsilşdslaişdlasişlişdsacdl işsadilşaLDİŞaslişÖDASİÖŞLDÖİLSAŞDöliasödilascöildaiölşsdöiaşsdöilasödilasiöldasöildasöildöilasdöilaöildöildasöildaöilsdöilasdölasdöliasölidasöildsaöildsöiladiösladöilsadöilsadöilasdiölsadiölsaöidlsaöildsöidiösladiölsadiölsadöilasöild

ist
+0

was og Bild ist sted bedeuten –

+0

Sie „statt“ bedeuten. Sie sollten nur den Code anstelle von Links zu Bildern posten. – Kasperi

+0

das ist alles, was ich tun kann –

Antwort

0

Sie können einen Befehl an den Server mit netID des Spielers senden, der gewonnen hat, und RPC einchecken, wenn die netID übereinstimmt.
Wenn netID für den lokalen Spieler dann übereinstimmt, ist er der Gewinner. Sonst verliert er. Haben Sie nicht den Code getestet, sollte aber funktionieren:

[Command] 
    public void CmdGameWon() 
    { 
     RpcGameEnd(this.netId); 
    } 

    [ClientRpc] 
    public void RpcGameEnd(NetworkInstanceId nid) 
    { 
     if(this.isLocalPlayer && this.netId==nid){ 
      //Process win here 
     }else{ 
      //Process lose here 
     } 
    }