Unity Netcode ServerRpc 仅在客户端执行

问题描述 投票:0回答:0

我正在尝试学习 Unity Netcode。

本质上,PlayerController 将出现在主机和客户端上。 PlayerController 预制件具有网络对象组件,并已添加到网络管理器中。 有一个 spawnPrefab 会在我按下主机上的空格键时实例化。 spawnPrefab 具有网络对象组件并已添加到网络管理器中。

当我在主机上点击空格时,预制件会在主机和客户端上生成。

但是,当我在客户端按下 Y 键时,出现错误提示 spawnedObjectTransform 尚未实例化。在主机端点击 Y 时我没有收到此错误,该对象在主机和客户端上都被破坏了。

这是玩家脚本。除了网络对象之外,spawnPrefab GameObject 上没有任何脚本。

public class PlayerController : NetworkBehaviour
{


public GameObject spawnPrefab;

private Transform spawnedObjectTransform;


void Update()
{
 
    // For multiplayer, if not owner, ignore all commands
    if (!IsOwner)
        return;

    if (Input.GetKeyDown(KeyCode.Space))
    {
        spawnedObjectTransform = Instantiate(spawnPrefab).transform;
        spawnedObjectTransform.GetComponent<NetworkObject>().Spawn(true);
    }
    

    if (Input.GetKeyDown(KeyCode.Y))
    {
        TestServerRpc();
    }
   
}

[ServerRpc(RequireOwnership = false)]
private void TestServerRpc()
{
    Destroy(spawnedObjectTransform.gameObject);
}

}

我能看到的唯一解释是 TestServerRpc 不知何故只在客户端调用,而不是在服务器端调用。 还有其他人见过这样的东西吗?

unity3d client-server multiplayer unity-networking
© www.soinside.com 2019 - 2024. All rights reserved.