unity3d NetworkServer未处于活动状态,如果Unity 3D中没有活动服务器,则无法生成对象

z31licg0  于 2022-12-19  发布在  其他
关注(0)|答案(3)|浏览(198)

我正在尝试在Unity3d中实现一个多人游戏功能。它就像一个蛇游戏,蛇吃食物并生成它的部分。我可以成功地生成食物和部分,但它不移动,并给我错误“网络服务器不活动。没有活动的服务器无法生成对象。”
下面是我的代码:-

private void CmdCheckForFood(Vector3 snakePartPosToBeInitialize,Vector3 headPos)
{

    if(_food != null)
    {
        if (_food.transform.position == headPos) // if food collide with head. 
        {
            _food.transform.position = GenerateRandomPosForFood(); 
               currPartOfSnake += 1;
            CmdCreatePartSnake(snakePartPosToBeInitialize);

        }
    }

}
public void CreatePartSnake(Vector3 snakePartPosToBeInitialize)
{
    GameObject obj = Instantiate(snakePart, snakePartPosToBeInitialize, Quaternion.identity) as GameObject;

    obj.name = "" + currPartOfSnake;
    obj.transform.parent = gameObject.transform;
    tail.Add(obj); // tail is list which contain all part of snake
    NetworkServer.Spawn(obj);
}
iih3973s

iih3973s1#

您正在尝试调用客户端的NetworkServer,因此在本例中,CreatePartSnake 应为[COMMAND],以便在服务器上运行。
http://docs.unity3d.com/ScriptReference/Networking.CommandAttribute.html

o8x7eapl

o8x7eapl2#

我不知道您是否仍然有这个问题,但正如@Jansen所说,您需要在函数上方添加[Command]标记,并在函数开头添加Cmd。
此外,您还可以使用NetworkServer.active()检查服务器是否处于活动状态。
类似if(NetworkServer.active())的语句应该足以确保除非网络服务器启动,否则函数不会被调用。
请确保您的服务器实际上也已启动!

qgzx9mmu

qgzx9mmu3#

  • 注意:当前的Unity文档会让您发疯,请自担风险尝试此操作 *

我也面临着同样的问题,我解决它通过使函数与command Attribute,你应该需要改变你的产卵函数的东西,像这样

[Command]//add command attribute to the spawning function and also add Cmd in function name
    public void CmdCreatePartSnake(Vector3 snakePartPosToBeInitialize)
    {
        GameObject obj = Instantiate(snakePart, snakePartPosToBeInitialize, Quaternion.identity) as GameObject;

        obj.name = "" + currPartOfSnake;
        obj.transform.parent = gameObject.transform;
        tail.Add(obj); // tail is list which contain all part of snake
        NetworkServer.Spawn(obj);
    }

但首先需要从Network Behaviour派生类。

相关问题