- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Unity 2019.3.2f1 制作回合制多人游戏,并使用 Mirror 连接玩家。我的目标是将玩家对象添加到 GameMaster 脚本中(您将在我最底部的脚本中看到),以便我可以跟踪它们并在 Player 脚本中更新它们的进度。我遵循了 DapperDino 的 youtube 教程 (https://www.youtube.com/watch?v=oBRt9OifJvE&list=PLS6sInD7ThM1aUDj8lZrF4b4lpvejB2uB&index=2) 并制作了一个大厅,从教程中复制了除生成器系统之外的所有内容,并且我对场景的名称进行了调整,删除了 map 处理程序,而只有 2 个场景。 2名玩家进入大厅后,点击准备,主机点击开始,MainMenu场景切换到GameScene,游戏开始,但在此之前功能NetworkServer.ReplacePlayerForConnection(conn, gameplayerInstance.gameObject)
被调用,在场景改变之前。我得到这个错误:
RemoveClientAuthority 只能在服务器上为生成的对象调用。
UnityEngine.Logger:Log(LogType, Object) Mirror.ILoggerExtensions:LogError(ILogger, Object) (at Assets/Mirror/Runtime/LogFactory.cs:58) Mirror.NetworkIdentity:RemoveClientAuthority() (at Assets/Mirror/Runtime/NetworkIdentity .cs:1230) Mirror.NetworkServer:InternalReplacePlayerForConnection(NetworkConnection, GameObject, Boolean) (at Assets/Mirror/Runtime/NetworkServer.cs:843) Mirror.NetworkServer:ReplacePlayerForConnection(NetworkConnection, GameObject, Boolean) (at Assets/Mirror/Runtime/NetworkServer.cs:680) DapperDino.Mirror.Tutorials.Lobby.NetworkManagerLobby:ServerChangeScene(String) (at Assets/Lobby/Scripts/NetworkManagerLobby.cs:181) DapperDino.Mirror.Tutorials.Lobby.NetworkManagerLobby:StartGame() (at Assets /大厅/脚本/NetworkManagerLobby.cs:163)
为什么应该调用 RemoveClientAuthority()?
然后我收到这个警告:试图在没有权限的情况下为对象发送命令。播放器.CmdAddPlayer
这是我的代码。如您所见,在更新时我检查 if(!hasAuthority),如果客户端没有,我将返回 Update 函数,但它从来没有,所以我对其进行了评论以进行调试。我得到的警告是在主机进程上,这让我感到困惑。主机不应该有权限,因为它也是服务器吗?
using System.Collections.Generic;
using UnityEngine;
using Mirror;
public class Player : NetworkBehaviour
{
GameMaster gameMaster=null;
//public NetworkManager networkManager;
public Country country;
public List<Territory> controlledTerritories;
public List<Army> armies = new List<Army>();
public int gold;
bool set = false;
void Start()
{
//networkManager = GameObject.FindWithTag("NetworkManager").GetComponent<NetworkManager>();
}
[Client]
void Update()
{
//Debug.Log(networkManager);
if (!set)
{
if (!hasAuthority)
{
//return;
}
Debug.Log("About to call CmdAddPlayer()");
//This is the furthest I get. I get the warning after trying to call CmdAddPlayer() and it isn't called
CmdAddPlayer();
}
}
[Command]
void CmdAddPlayer()
{
//Validate logic here
Debug.Log("Called CmdAddPlayer()");
RpcAddPlayer();
}
[ClientRpc]
void RpcAddPlayer()
{
Debug.Log("Called RpcPlayer()");
GameObject _mapTmp = GameObject.FindWithTag("GameController");
GameMaster _gameMasterTmp = null;
if (_mapTmp != null)
{
_gameMasterTmp = _mapTmp.GetComponent<GameMaster>();
}
if (gameMaster == null && _gameMasterTmp != null)
{
gameMaster = _gameMasterTmp;
gameMaster.players.Add(this);
set = true;
}
}
}
最佳答案
我正在学习相同的教程并遇到相同的错误。
基本上显然它与Mirror的ServerChangeScene有关。
你可以很容易地解决这个问题。在 DapperDino NetworkManagerLobby 脚本中,转到 ServerChangeScene 覆盖,并获取销毁的 reid,以便它从这里开始:
NetworkServer.Destroy(conn.identity.gameObject);
NetworkServer.ReplacePlayerForConnection(conn, gameplayerInstance.gameObject);
以便将其更改为:
NetworkServer.ReplacePlayerForConnection(conn, gameplayerInstance.gameObject);
这应该解决它。房间播放器对象似乎会自动销毁。
void CallCommandMove(){
if(!isLocalPlayer){
return;
}
CmdMove();
}
或者,如果您尝试执行第二个操作,则需要授予您自己的玩家对象权限(如该线程中接受的答案所示:
Unity3D. Trying to send command for object without authority
关于c# - 为什么主机玩家没有权限发送服务器[命令]?统一 - 镜子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62458966/
我在某人的 .Rprofile 中看到了一个设置 options(repos = c(CRAN = "http://streaming.stat.iastate.edu/CRAN",
我正在使用 Unity 2019.3.2f1 制作回合制多人游戏,并使用 Mirror 连接玩家。我的目标是将玩家对象添加到 GameMaster 脚本中(您将在我最底部的脚本中看到),以便我可以跟踪
使用 Opencv 和 Linux,我想使用实时网络摄像头创建一个有趣的镜子效果,矮矮、高瘦的效果。我女儿喜欢这些东西,我想用相机制作一个。我不太确定这些效果所需的变换。任何帮助,将不胜感激。我运行了
我是一名优秀的程序员,十分优秀!