Unity C# 简单多人游戏结局



如何编辑 c# 代码以显示当另一个玩家死亡时玩家 1 或 2 获胜。并向死去的玩家展示他们输了?

播放器控制器脚本

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;
    }

}
}

运行状况脚本

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;
        }
    }
    }
}

This is the 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öildöildasöildaöildaöilsdöilsdöilasdölasdöliasölidasöildsaöildsöiladiösladöilsadöilasdiölsadiölsaöidlsaöildsöidiösladiölsadiölsaöidlsaöildsöidiösladiölsadiölsadöilsadöilasöild

您可以使用获胜玩家的 netID 向服务器发送命令,如果 netID 匹配,则签入 RPC。
如果 netID 与本地玩家匹配,则他就是赢家。否则,他就输了。尚未测试以下代码,但应该可以工作:

   [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
        }
    }

最新更新