1

ゲーム内にキューブがあり、別のオブジェクトを見ているときに、初期状態とより大きな状態の間を行き来します。これはシングル プレイヤーでは問題なく動作しますが、マルチプレイヤーに持ち込むと、両方のクライアント (1 つはホスト) で更新するための適切なオプションの組み合わせが見つかりません。各プレイヤーは自分のキューブをアクティブ化できますが、他のマシンには表示されません。スクリプトは、ネットワーク ID を持つボタン上にあり、ネットワーク ID とネットワーク変換も持つキューブにアクセスします。

シングル プレイヤー コード リファレンス:

void Update () {

    if (Camera.main != null) {
        RaycastHit hit;
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(ray, out hit)) {
            if (hit.collider.gameObject == gameObject && hit.distance < 5) {
                PlatformScale();
            } else {
                PlatformReset();
            }
        }
    }
}

void PlatformScale () {
    platform.transform.localScale = Vector3.Lerp (platform.transform.localScale, platformScale, 3f * Time.deltaTime);
}
void PlatformReset () {
    platform.transform.localScale = Vector3.Lerp (platform.transform.localScale, platformStartingScale, 3f * Time.deltaTime);
}
4

2 に答える 2

1

まだ読んでいない方のために、Unity Networking Manualを読むことを強くお勧めします。

[Command] または [ClientRpc] (サーバー上にあるオブジェクトとローカルにあるオブジェクトに応じて) 関数を使用して、スケールを lerp することをお勧めします。

ただし、ネットワーク変換があるため、それらは必要ない場合があります。ネットワーク上でキューブを適切に生成/インスタンス化したことを確認してください。

編集:ネットワーク上でキューブを生成するには...

using UnityEngine;
using UnityEngine.Networking;

public class CubeStuff : NetworkBehaviour {

    public GameObject cubePrefab;
    public GameObject cube;
    public override void OnStartServer() {
        GameObject cubeSpawn = (GameObject)Instantiate(cubePrefab, transform.position, transform.rotation);
        NetworkServer.Spawn(cubePrefab);
    }
}

ただし、ドキュメントによると、オブジェクトがシーン内にある限り、オブジェクトをネットワークスポーンする必要はありません。これは処理されるため、問題は別の場所にあります。

あなたが何をセットアップしたかを本当に知るのに十分な情報がありません。ボタンと UI はシーン内のオブジェクトにすることができます。ローカル プレーヤー権限がチェックされていることと、それらのOnClick()参照が関数を呼び出していることを確認してください[Command]

于 2016-08-07T20:15:39.717 に答える