【问题标题】:UNET How to run functions on all clients and hostUNET 如何在所有客户端和主机上运行功能
【发布时间】:2019-08-10 16:48:00
【问题描述】:

我需要帮助在所有客户端和主机上运行功能。

我尝试了以下代码,但它只适用于主机而不适用于客户端。

在这段代码中我做了一个跳跃技能。当玩家拿走它时,他们可以通过按R键来使用它。它在主机上运行良好,但在客户端上不起作用。

[Command]
void Cmd_ProvideJumpToserver()
{
    Rpc_JumpUp();
}
[ClientRpc]
void Rpc_JumpUp()
{
    if (JumpUp == 1)
    {
        Debug.Log("Jump Up Used");
        gameObject.GetComponent<Rigidbody2D>().AddForce(Vector2.up * 15f, ForceMode2D.Impulse);
        JumpUp = 0;
    }
}

【问题讨论】:

  • 好吧,我想必须将 JumpUp 设置为 1。
  • 是的,当他们从地图中获取技能时,JumpUp 变量会变为一个 nad,我也尝试从地图中获取并从检查员那里获取,但它不起作用。顺便说一句,我得到了 Debug.Log("Jump Up Used");控制台上的消息。
  • 您能告诉我们您是如何将JumpUp 设置为1 的吗?你也得到客户端上的Jump Up Used 方法还是只有主机?

标签: c# unity3d unity3d-unet


【解决方案1】:
public class Move : NetworkBehaviour
{
    private void Start()
    {
        if (isLocalPlayer) return;
        // Here we closed the script which is not ours
        GetComponent<Move>().enabled = false;
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.T))
        {
            CmdComand();
        }
    }

    [Command]
    private void CmdComand()
    {
        // We give it to server
        RpcToClients();
    }

    [ClientRpc]
    private void RpcToClients()
    {
        // Here we do what we want to happen on all player
        GetComponent<Rigidbody2D>().AddForce(Vector2.up * 5,ForceMode2D.Impulse);
    }
}

感谢那些试图帮助我的人:))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多