2016-08-07 6 views
0

私のゲームでは、別のオブジェクトを見ながら、初期状態と大きな状態の間にあるキューブを持っています。これはシングルプレイヤーではうまくいきますが、マルチプレイヤーに持ってこれば、両方のクライアント(ホストが1人)でアップデートできるように、適切な組み合わせのオプションを見つけることができません。各プレイヤーは自分のキューブをアクティブにできますが、他のマシンには表示されません。このスクリプトは、ネットワークIDを持つボタン上にあり、キューブにもアクセスします。キューブには、ネットワークIDとネットワーク変換もあります。Unet/Unity 5の別のインタラクティブオブジェクトから変更された非プレイヤオブジェクトのトランスフォームを同期しますか?

シングルプレーヤーのコード参照:ちょうどあなたが既にそれを読んでいない場合には、私は非常にUnity Networking Manual

を経由示唆

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); 
} 

答えて

0

私は([コマンド]を使用することをお勧めまたは[ClientRpc]どのオブジェクトがサーバー上にあり、どのオブジェクトがローカルにあるかに依存して)スケールを拡大する機能を提供します。

ネットワーク変換が必要な場合は必要ありませんが、ネットワーク上のキューブが正しくspawned/であることを確認してください。

編集:ネットワーク上のキューブを起動するには...

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); 
    } 
} 

ただし、次のドキュメントによると、あなたはあまりにも長い間、これがために処理されるよう、それはin the sceneだとしてオブジェクトを生むネットワークする必要はありません。あなたの問題はどこか他のところにある。

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

+0

オブジェクトはインスタンス化されていないため、動作する必要がありますか?私はちょうどその場面でそれを持っています。私はマニュアルを読んだが、別のデバイスで制御されているノンプレイヤーオブジェクトの変換を更新することはできない。もしあなたが直接それを持っているなら、それは私を助けてくれるでしょう。 –

+0

それはちょうどそれを産むことによって動作するはずです...モバイル上のImはひどいフォーマットのために残念です。あなたは空のgameobjectをシーンに追加して、この中にスクリプトを追加してみることができます: 'public GameObject cubePrefab; public OnStartServer(){NetworkServer.Spawn(cubePrefab); void } 'キューブのプレハブを作成し、そのプレハブをネットワークマネージャの生成可能オブジェクトに登録し、それをインスペクタのcubePrefabスロットにドラッグして上記のスクリプトを作成する必要があります。あなたのキューブとやり取りして、私に戻ってみてください。それが動作しないことを確認できれば、私はもっと助けることができます。 – Wafer

+0

こんにちは私は助けのおかげで数時間、テストすることはできません。ちょうど私はアイデアを持っているのですが、なぜオブジェクトがゲーム内で修正されるために生成されなければならないのですか?別のボタンにあるスクリプトをプレイヤーに移動しなければなりませんか? –

0

多くの検索の後、私はあなたがUnetでlocalScaleを同期できないことが分かりました。それは未知のバグです。ローカルスケールの代わりにポジションを使用するようにコードを変更しました。すべての助けに感謝します。

関連する問題