unity3d Unity 'Netcode for GameObjects'获取最近连接的客户端的ClientID

z4bn682m  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(276)

我有这个自定义的spawn函数来在新客户端连接时生成播放器预置,但由于它目前的编程,它为播放器生成一个新的预置,但它不会将所有权从服务器转移到新连接的客户端。我正在尝试使用player.GetComponent<NetworkObject>().SpawnWithOwnership();函数来生成所有权设置为客户端的新播放器预置。但为此,我需要将clientID作为参数传递给SpawnWithOwnership()函数,唯一的问题是我不确定如何获取clientID,因为我用来在客户端连接上生成预置的OnNetworkSpawn()函数没有任何参数,如clientID。I'我试着浏览了“Netcode for GameObjects”的API文档,但找不到一个函数可以让我获得我需要的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();
    }
}
hs1ihplo

hs1ihplo1#

您可能需要考虑将获取ClientID的方式更改为以下方法。我自己也尝试过进行相同的更改,似乎效果不错。只是一个建议!

public void TestServerRPC(ServerRpcParams serverRpcParams = default)
{
    var clientId = serverRpcParams.Receive.SenderClientId;
}

相关问题