0

RPC と Photon PUN について質問があります。

ゲーム内に RPC メソッドを呼び出すゲームオブジェクトが 1 つあります。このゲーム オブジェクトには、C# スクリプト (RPC メソッドを含む) と、観測されたスクリプトを含む/含まない (同じである必要がある) PhotonView コンポーネントが含まれ、ObserveOption は Off に等しくなります。

立方体に向かって撃たなければならないキャラクターがいます。このキューブには、前述のスクリプトとコンポーネントがアタッチされています。

RPC は 1 回送信されます (立方体が発射物と衝突したとき) が、ヒットした立方体のヘルスを減少させる必要があるため、私のシーンにはメッセージを受け取るべき多くの立方体があります。問題は、1 つのキューブのみが RPC 呼び出しを受信することです (RPC は、ゲームの開始時に最初にインスタンス化されたオブジェクトによってキャッチされます) が、RPC はシーン内のすべてのキューブ (そうですか?) によって受信される必要があります。

立方体はまったく同じですが、photonView ID が (当然のことながら) 異なるため、ヘルスを減少させるヒット キューブが正しいものであるかどうかを確認できます。

これは、コードの重要な部分です。

public static void reduceHealthRPC(float damage, int viewID)    
{         
    photonView.RPC("reduceHealth", PhotonTargets.All, damage, viewID);    
}

[RPC]
public void reduceHealth(float damage, int viewID)
{
    if(this._viewID != viewID) 
    {
        Debug.Log ("The view ID is not mine. My viewID is: " + _viewID + ", and the one which is coming form RPC is: " + viewID);
        return;
    }

    currentHealth -= damage;
    Debug.Log("My life is: " + currentHealth);
}

私が間違っていることを理解するのを手伝ってください。ありがとうございました。

4

3 に答える 3

0

すべてのキューブに対して RPC を呼び出す必要がある場合は、キューブごとに呼び出します。現在、静的な「photonView」変数によって参照されるオブジェクトに対してのみ RPC を呼び出しています。初期化方法に応じて、RPC はそのオブジェクトで呼び出されました。

于 2015-04-27T13:08:42.853 に答える
0

超遅いかもしれませんが、これを試しましたか?cube.csすべてのキューブに付いています。のmain.cs

cube[] allCubes = FindObjectsOfType<cube>();

for (int x = 0; x < allCubes.length; x++)
allCubes[x].reduceHealthRPC(dam,id);

これが目標である場合、これは 1 つのターゲット ID を持つすべてのキューブにコードを送信しますが、個々のキューブで rpc を実行する方がはるかに優れています。

于 2017-03-08T10:59:28.517 に答える