0
我需要修改非玩家對象。我能夠做到這一點,但由於某種原因,我得到警告:權限與UNET客戶端
Trying to send command for object without authority.
UnityEngine.Networking.NetworkBehaviour:SendCommandInternal(NetworkWriter, Int32, String)
ModelControl:CallCmdSetCube()
ModelControl:Update() (at Assets/Scripts/ModelControl.cs:21)
我已經通過統一的文檔和各種答案,但怪異的一部分消失的是,它的工作,但我希望阻止警告。
首先有一個管理器對象,用於創建中性對象。這發生在主機上。
public class ObjectControl : NetworkBehaviour
{
public GameObject cube;
public override void OnStartServer()
{
if (GameObject.Find("Cube") != null) { return; }
GameObject cubeInstance = (GameObject)Instantiate(this.cube,
new Vector3(0f, 0f, 5f), Quaternion.identity);
cubeInstance.name = "Cube";
NetworkServer.Spawn(cubeInstance);
}
}
然後每個球員有以下幾點:
private void CmdSetCube()
{
GameObject cube = GameObject.Find("Cube"); // This is the neutral object
if (cube != null)
{
NetworkIdentity ni =cube.GetComponent<NetworkIdentity>();
ni.AssignClientAuthority(connectionToClient);
RpcPaint(cube, new Color(Random.Range(0f, 1f), Random.Range(0f, 1f), Random.Range(0f, 1f)));
ni.RemoveClientAuthority(connectionToClient);
}
}
[ClientRpc]
void RpcPaint(GameObject obj, Color col)
{
obj.GetComponent<Renderer>().material.color = col;
}
主機不會觸發報警。只有遠程客戶端纔會收到警告。當我有很多客戶端時,我可以在編輯器控制檯看到它將打印多少次客戶端。 但是,它確實有效,我可以看到新數據傳播到所有會話中,但我期望稍後會有某些事情停止。