【问题标题】:Spawn Player at Specific location With Unet使用 Unet 在特定位置生成玩家
【发布时间】:2016-07-14 08:30:21
【问题描述】:

我正在尝试在 2 个不同的位置生成 2 个玩家(主机和客户端)

我不知道该怎么做,因为播放器是由网络管理员自动生成的。

我尝试了以下方法,但失败了:(。

[Command]
void CmdSpawn()
{
    var go = (GameObject)Instantiate(
              gameObject, 
              transform.position + new Vector3(0,1,0), 
              Quaternion.identity);

    NetworkServer.SpawnWithClientAuthority(go, connectionToClient);
}

如何在特定位置生成 Player 对象?

【问题讨论】:

    标签: c# unity3d unity3d-unet


    【解决方案1】:

    在脚本中更改玩家对象的位置是否有任何问题?例如,您可以尝试在播放器对象上添加以下脚本:

    void Start () {
        if (isServer) // host runs
        {
            transform.position = new Vector3(0,0,0);
        }
        else if (isClient) // client runs
        {
            transform.position = new Vector3(10,0,10);
        }
    }
    

    【讨论】:

    • 您可以在游戏控制器对象中添加生成位置列表。然后从列表中随机使用一个位置,您将拥有多个产卵位置。
    • 似乎合乎逻辑,让我试试看,谢谢
    • 效果很好!我期待一个更复杂的解决方案。非常感谢!
    • 没问题,很高兴为您提供帮助:)
    【解决方案2】:

    NetworkManager 已经支持生成位置。

    只需将 GameObjects 添加到您希望玩家生成的位置,并为他们提供 NetworkStartPosition 组件。 NetworkManager 将自动检测开始位置并根据您的“玩家生成方法”设置自动使用它们,“随机”(为每个玩家随机选择一个生成位置)或“循环规则”(玩家 #0 在第一个位置生成,玩家 #1 排在第二位,依此类推)。

    【讨论】:

    • 我确实附加了该组件,但之后我该怎么办?我如何知道在哪里生成哪个玩家?
    • 我已经解释过了。你不清楚哪一部分?当然,如果您已经实现了自定义生成逻辑来解决起始位置问题,您应该删除它,这样您就不会干扰 NetworkManager 的实现。
    • 是否有可能知道/告诉 Unity NetworkStartPositions 的使用顺序?
    【解决方案3】:

    我遇到了类似的问题,这里是这个帖子中的解决方案,读到最后。

    http://forum.unity3d.com/threads/which-function-to-override.391076/

    【讨论】:

      【解决方案4】:

      制作一个 GameObject 并将 NetworkStartPosition 附加到它。然后,把它放在某个地方。如果你想要超过 1 个生成点,你可以 CTRL+D 那个对象。然后,转到 NetworkManager 并选择 Round Robin 来生成第一到第一、第二到第二等等。选择 Random 来生成随机生成点。

      【讨论】:

        猜你喜欢
        • 2021-10-17
        • 1970-01-01
        • 2022-11-13
        • 2021-01-07
        • 1970-01-01
        • 2016-12-21
        • 1970-01-01
        • 2020-04-25
        • 2016-06-24
        相关资源
        最近更新 更多