我遵循了有关如何使用Unity网络的Youtube教程https://www.youtube.com/watch?v=afz2An4X0vw。 关键是要让一个带有网络ID组件的对象生成播放器,并且为了控制播放器,我们需要赋予客户端生成播放器对该播放器的权限。
但是,与视频中的操作完全相同,每当我主持游戏(使用统一的Network HUD)时,hasAuthority都会在主机上返回false而不是true。
它在所有其他客户端上返回true(应如此)。 在我看来,托管人似乎并没有将自己视为客户端,而只是将其视为服务器,但这在上面链接的视频中并未发生。
我如何使托管播放器在hasAuthority上返回true,因为它拒绝使用以下代码?
对象上的脚本(客户端连接时生成):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class ThePlayerScript : NetworkBehaviour
{
public GameObject abigail;
public GameObject abigailN;
void Start ()
{
if(isLocalPlayer == false)
{
return;
}
CmdSpawnPlayer();
}
void Update () { }
[Command]
void CmdSpawnPlayer()
{
abigailN = Instantiate(abigail);
NetworkServer.SpawnWithClientAuthority(abigailN, connectionToClient);
}
}
由游戏对象产生的玩家代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class Abigail : NetworkBehaviour
{
public GameObject mainCamera;
Vector3 myLocation;
Vector3 cameraView;
// Use this for initialization
void Start ()
{
if(hasAuthority == false)
{
Destroy(this);
return;
}
mainCamera = GameObject.Find("Main Camera");
}
}
(我删除了Abigail类中的Update函数,因为它不相关,因为它没有被执行。)
答案 0 :(得分:0)
我发现在这种情况下hasAuthority只会在Start()方法中返回false。如果您在Update()方法中使用它,则只需像在“ ThePlayerScipt”中那样使用以下方法分配权限即可正确返回true:
NetworkServer.SpawnWithClientAuthority(abigailN, connectionToClient);
希望有帮助:)