当新客户端连接时,我有这个自定义的生成函数来生成玩家预制件,但由于目前的编程,它为玩家生成了一个新的预制件,但是它不会将所有权从服务器转移到新连接的客户端。我正试图使用player.GetComponent<NetworkObject>().SpawnWithOwnership();
函数来生成新的播放器预制件,所有权设置为客户端,但要做到这一点,我需要将clientID作为参数传递给SpawnWithOwnership()
函数,唯一的问题是我不确定如何获得客户端ID,因为我在客户端连接上用于生成预制件的OnNetworkSpawn()
函数没有任何参数,如clientID
。我试着查阅API文档中的"游戏对象的Netcode",但找不到一个函数可以让我获得所需的clientID
。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.Netcode;
public class SpawnPlayer : NetworkBehaviour
{
public GameObject playerPrefab;
public float x, y, z;
public override void OnNetworkSpawn(){
if (!playerPrefab) return;
Debug.Log("Called");
Spawn();
}
void Spawn(){
Debug.Log("Called 2");
GameObject player = Instantiate(playerPrefab, new Vector3(x, y, z), Quaternion.identity);
player.GetComponent<NetworkObject>().SpawnWithOwnership();
}
}
您可能需要考虑将获取ClientID的方式更改为以下方法。我试着自己做同样的改变,结果似乎效果很好。只是一个建议!
public void TestServerRPC(ServerRpcParams serverRpcParams = default)
{
var clientId = serverRpcParams.Receive.SenderClientId;
}