使用 Unet 在特定位置生成玩家

Spawn Player at Specific location With Unet

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

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

我尝试了以下但失败得很惨:(。

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

    NetworkServer.SpawnWithClientAuthority(go, connectionToClient);
}

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

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

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);
    }
}

NetworkManager 已经支持生成位置。

只需在您希望玩家生成的位置添加游戏对象,并为它们提供 NetworkStartPosition 组件。 NetworkManager 将自动检测开始位置并根据您的 "Player Spawn Method" 设置自动使用它们 "Random"(为每个玩家随机选择一个重生位置)或 "Round Robin"(玩家 #0 重生在第一名,玩家 #1 在第二名,依此类推)。

我遇到了类似的问题,这是本帖中的解决方案,请阅读到底。

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

创建一个游戏对象并为其附加一个 NetworkStartPosition。然后,把它放在某个地方。如果你想要超过 1 个生成点,你可以 CTRL+D 该对象。然后,转到 NetworkManager 和 select Round Robin 以生成第一个到第一个、第二个到第二个等等。select Random 用于随机生成点。