问题描述
我正在尝试为我的学校论文创建LAN游戏,但似乎无法弄清楚如何为每个使用Unity中的Mirror连接到服务器的玩家生成不同的预制件。我可以创建一个房间,但是每次有玩家加入时,他将拥有与服务器相同的预制件,并且我希望它有所不同。
这是我的网络管理器的设置。我用here
中的代码在脚本上附加了一个名为Char1的脚本。我能够创建一个房间并使用Parrelsync同步所有内容,但是无法为每个将要连接的播放器设置不同的预制件。您需要任何帮助我的信息只是告诉我,我会尽快回答。
解决方法
由于您的问题没有得到答案:
在自定义 NetworkingManager 类(顺便说一下,它应该从 NetworkManager 继承)的顶部,您应该创建一个公共 GameObject 变量。当您的代码编译时,它将在您的编辑器中显示为您命名的任何内容。之后,您可以将其设置为您制作的预制对象。
之后,只需在代码中将您要实例化的 GameObject 设置为该对象即可。
public class MyNetworkingManager : NetworkManager
{
public GameObject PlayerPrefab2;
public override void OnStartServer()
{
base.OnStartServer();
NetworkServer.RegisterHandler<CharacterCreatorMessage>(OnCreateCharacter);
}
public override void OnClientConnect(NetworkConnection conn)
{
base.OnClientConnect(conn);
//send the message here
//the message should be defined above this class in a NetworkMessage
CharacterCreatorMessage characterMessage = new CharacterCreatorMessage
{
//Character info here
};
conn.Send(characterMessage);
}
void OnCreateCharacter(NetworkConnection conn,CharacterCreatorMessage message)
{
if (message.character.Equals("player2"))
{
GameObject gameobject = Instantiate(PlayerPrefab2);
Player2 player = gameobject.GetComponent<Player2>();
NetworkServer.AddPlayerForConnection(conn,gameobject);
} else if (message.character.Equals("player1"))
{
GameObject gameobject = Instantiate(playerPrefab);
Player player = gameobject.GetComponent<Player>();
NetworkServer.AddPlayerForConnection(conn,gameobject);
}
}
}
https://mirror-networking.gitbook.io/docs/guides/gameobjects/custom-character-spawning 是此处基类概念的很好参考。
,请注意,“不推荐使用”的系统在游戏引擎中是完全常见的。
(例如,出于天生的缘故,Unity的原始GUI永远不会从Unity中删除,并且已被标记为已淘汰15 ??????年!)
他们只是弃用了UNet,以明确即将推出新的UNet(几年后)。
Unity的“传统” UNet网络仍然可以完美运行(2020年)
在Unity 2020.2.0b8中,键入任何脚本
using UnityEngine.Networking;
您会发现它仍然是完全内置的。
如果您转到软件包管理器(菜单...软件包管理器),他们会愚蠢地将其从便捷列表中删除。
Simply轻按“ +”符号,git,然后加载com.unity.multiplayer-hlapi
。
现在只需使用完全可以接受的教程,例如https://docs.unity3d.com/2020.2/Documentation/Manual/UNet.html
根本没有理由为第三者套餐挣扎
这真是真正的神秘化,为什么人们会为诸如Mirror之类的东西而挣扎。
-
UNet像以往一样完美运行。
-
当Unity最终发布“ DOTS”(或任何其他版本)时,每个人都必须更改为DOTS。
-
使用诸如Mirror之类的“伪UNet”是完全没有意义的,因为无论如何(当它最终出现时)您都必须更改为DOTS。
-
UNet在最终发布下一个版本之前可以使用。
完全没有理由 使用“假UNet”尝试。
UNet完美运行-从样式上讲就是胡扯。
别忘了UNet的完美表现。
每个人都讨厌它的唯一原因是该架构“极其丑陋”。
请注意,在OP的示例中,完全没有理由不使用UNet。
OP试图完成的任务,实际上可以使用UNet在1分钟内完成。
使用UNet十分容易,而且坚如磐石。