1

我正在开发一个 Unity Network 游戏,其中有两个玩家有一些基本动作。一个玩家由服务器控制,另一个玩家由客户端控制。

为此,我建立了一个客户端/服务器连接。建立连接后,我可以在屏幕两侧看到两个玩家。我使用了 RPC 方法。

现在,如果我在服务器上移动,我可以看到服务器玩家也在客户端移动。这意味着它们是同步的。但是当我在客户端移动时,只有客户端玩家移动。我看不到服务器端的移动。为什么这不起作用?

我已经用 UnityScript 编写了代码。

#pragma strict
var farword:boolean=false;
var backword:boolean=false;

var FirstPlayer:GameObject;
var SecondPlayer:GameObject;

var isFarword=false;
var isBackword=false;
function Update () {

    if(isFarword)
    { 
        networkView.RPC("ChangePos",RPCMode.All);
        isFarword=false;
    }
}

@RPC
function ChangePos()
{
    if(isFarword)
    {
        if(Network.isServer)
        {
            FirstPlayer.transform.Translate(0,0,1);
            isFarword=false;
        }
        if(Network.isClient)
        {
            SecondPlayer.transform.Translate(0,0,1);
            isFarword=false;
        }
    }
    else if(isBackword)
    {
        if(Network.isServer)
        {
            FirstPlayer.transform.Translate(0,0,-1);
            isBackword=false;
        }
        if(Network.isClient)
        {
            SecondPlayer.transform.Translate(0,0,-1);
            isBackword=false;
        }
    }
}

function OnGUI()
{
    if(GUI.RepeatButton(new Rect(1000,100,80,70),"Farword"))
    {
        isFarword=true;
    }
    if(GUI.RepeatButton(new Rect(850,100,80,70),"second"))
    {
        isBackword=true;
    }
}
4

1 回答 1

0

问题可能出在你实例化玩家的地方..

使用网络事件来创建玩家,例如..

Network.OnPlayerConnected是您应该 Network.Instantiate 客户端播放器的地方,而Network.OnServerInitialized是您应该 Network.Instantiate 服务器播放器的地方。这将导致他们每个人都是所有者。

此外,网络游戏有一些心理逻辑需要思考,尽量总是使用 NetworkView.isMine 来确定谁是对象的所有者,谁不是。请记住,只有所有者才能移动对象,其他玩家正在监听坐标。

祝你好运!

于 2013-04-22T11:42:09.413 回答