如何在Unity中使用Mirror生成其他预制件?

问题描述

我正在尝试为我的学校论文创建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

enter image description here

enter image description here

现在只需使用完全可以接受的教程,例如https://docs.unity3d.com/2020.2/Documentation/Manual/UNet.html

根本没有理由为第三者套餐挣扎

这真是真正的神秘化,为什么人们会为诸如Mirror之类的东西而挣扎。

  1. UNet像以往一样完美运行。

  2. 当Unity最终发布“ DOTS”(或任何其他版本)时,每个人都必须更改为DOTS。

  3. 使用诸如Mirror之类的“伪UNet”是完全没有意义的,因为无论如何(当它最终出现时)您都必须更改为DOTS。

  4. UNet在最终发布下一个版本之前可以使用。

完全没有理由 使用“假UNet”尝试。

UNet完美运行-从样式上讲就是胡扯。

别忘了UNet的完美表现。

每个人都讨厌它的唯一原因是该架构“极其丑陋”。

请注意,在OP的示例中,完全没有理由不使用UNet。

OP试图完成的任务,实际上可以使用UNet在1分钟内完成。

使用UNet十分容易,而且坚如磐石。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...