我正在尝试学习 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 不知何故只在客户端调用,而不是在服务器端调用。 还有其他人见过这样的东西吗?