我有这个自定义的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();
}
}
1条答案
按热度按时间hs1ihplo1#
您可能需要考虑将获取ClientID的方式更改为以下方法。我自己也尝试过进行相同的更改,似乎效果不错。只是一个建议!