繁体   English   中英

unity C# 简单多人游戏结局

[英]Unity C# Simple Multiplayer game ending

如何编辑 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;
        }
    }
    }
}

这是codeaspğlasdlişsadlşisadlşiadsilşdslaişdlasişlişdsacdliş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

您可以使用获胜玩家的 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
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM