1

私はいくつかの基本的な動きを持つ 2 人のプレーヤーがいる 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 に答える