我正在尝试在Unity3d中实现多人游戏功能。它像蛇游戏一样,蛇吃食物并产生它的一部分。我可以成功生成食物和部分,但它没有移动并给我错误“NetworkServer没有活动。没有活动服务器就无法生成对象。”
这是我的代码: -
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);
}
答案 0 :(得分:0)
您尝试在客户端调用NetworkServer,因此在这种情况下, CreatePartSnake 应为[COMMAND],以便在服务器上运行。
http://docs.unity3d.com/ScriptReference/Networking.CommandAttribute.html
答案 1 :(得分:0)
我不知道你是否还有问题,但正如@Jansen所说,你需要在函数上方添加[Command]标签,并将Cmd添加到函数的开头。
此外,您可以使用NetworkServer.active()检查服务器是否处于活动状态。
if(NetworkServer.active())之类的东西应足以确保除非网络服务器已启动,否则不会调用该函数。
确保您的服务器实际上也正在启动!
答案 2 :(得分:0)
注意:当前的统一文档会让你发疯,请自行承担风险
我也面临同样的问题,我通过使用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派生您的课程。