播放器ReSpawn Logic Unity多人游戏

时间:2018-07-05 17:39:52

标签: unity3d

我正在通过Unity Multiplayer系统学习多人游戏的实现。 因此,我遇到了为初学者编写的非常好的教程: Introduction to a Simple Multiplayer Example

在本教程中,我无法理解此页面内容: Death and Respawning

通过这段代码,在教程中,他们正在谈论我们的玩家将重生(玩家将在0位置变形,生命值将为100),并且玩家可以再次战斗。

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

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;

        // called on the Server, but invoked on the Clients
        RpcRespawn();
    }
}

void OnChangeHealth (int currentHealth )
{
    healthBar.sizeDelta = new Vector2(currentHealth , healthBar.sizeDelta.y);
}

[ClientRpc]
void RpcRespawn()
{
    if (isLocalPlayer)
    {
        // move back to zero location
        transform.position = Vector3.zero;
    }
}
}

按照我的想法->所有客户端都在执行ClientRPC,因此本地播放器的所有设备都将在生成位置移动,并且运行状况会充满。 按照本教程->仅更新自己玩家的生成位置和生命值。

那为什么我无法理解这件事呢? 实际上,RPC在所有客户端上都被调用,然后所有客户端都应要求移动到起始位置并获得完全的运行状况。 请给我一些解释。

1 个答案:

答案 0 :(得分:0)

您可以在该图像上看到,您需要认为网络系统不是“共享”房间,它们实际上是在您自己房间中复制其他系统的所有内容。 enter image description here 知道了这一点,现在您可以理解,如果从播放器1发送Rpc,则Rpc将在播放器1上执行,而播放器1将在播放器2的房间中复制。

由于您可以在文档上阅读[ClientRpc]属性,因此:

  

是可以放在NetworkBehaviour方法上的属性   类,以允许它们在服务器上的客户端上被调用。

因此,由于播放器1的房间是主机(服务器+客户端),而播放器2的是客户端,则它将在2个房间的主机上执行,但在第一个房间进行评估。

编辑:这意味着,例如,播放器1死亡时,它将调用RPC函数,并且(因为它是RPC)他在房间2上的副本(Player1-Copy)将执行相同的操作

相关问题