使用 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 用于随机生成点。
我正在尝试在 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 用于随机生成点。