2016-10-28 15 views
0
using UnityEngine; 
    using System.Collections; 

    public class SpawnGameObjectsNetwork : Photon.MonoBehaviour 
    { 
    public float secondsBetweenSpawning = 0.1f; 
    public float xMinRange = -25.0f; 
    public float xMaxRange = 25.0f; 
    public float yMinRange = 8.0f; 
    public float yMaxRange = 25.0f; 
    public float zMinRange = -25.0f; 
    public float zMaxRange = 25.0f; 
    public float zMinRange2 = 81.0f; 
    public float zMaxRange2 = 85.0f; 
    public string spawnObjects; 
    Vector3 spawnPosition; 
    Vector3 spawnPosition2; 

    public float nextSpawnTime;  

    void Start() 
    {  
     nextSpawnTime = Time.time+secondsBetweenSpawning;  
    }  

    void Update() 
    { 
     if (PhotonNetwork.isMasterClient) 
     {   
      if (Time.time > nextSpawnTime) 
      {    
       Vector3 spawnPosition; 
       Vector3 spawnPosition2; 
       spawnPosition.x = Random.Range (xMinRange, xMaxRange); 
       spawnPosition.y = Random.Range (yMinRange, yMaxRange); 
       spawnPosition.z = Random.Range (zMinRange, zMaxRange); 
       spawnPosition2.x = Random.Range (xMinRange, xMaxRange); 
       spawnPosition2.y = Random.Range (yMinRange, yMaxRange); 
       spawnPosition2.z = Random.Range (zMinRange2, zMaxRange2); 

       GetComponent<PhotonView>().RPC("MakeThingToSpawn", PhotonTargets.All, spawnPosition, spawnPosition2);     
       nextSpawnTime = Time.time + secondsBetweenSpawning; 
      }  
     } 
    } 

    [PunRPC] 
    void MakeThingToSpawn(Vector3 spawnPosition, Vector3 spawnPosition2) 
    {  

      GameObject spawnedObject = PhotonNetwork.Instantiate(spawnObjects, spawnPosition, transform.rotation, 0) as GameObject; 
      GameObject spawnedObject2 = PhotonNetwork.Instantiate(spawnObjects, spawnPosition2, transform.rotation, 0) as GameObject;  


    } 
} 

このコードは、プレーヤプレハブに取り付けられ、2つのオブジェクトが作成され、 同じ場所に、WICHは、両方のすべてのプレーヤーのために表示されています。 1人のプレーヤーはこれらのオブジェクトの1つを に移動することができ、もう一方を制御することはできません。状況 は2番目のプレーヤーの反対です。どのようにそれを行うには は、(私は持っている 別のスクリプトで)制御することができる1つのインスタンス化されたオブジェクトだけですすべての選手?Photon Unity Networkでゲームオブジェクトを正しくインスタンス化する方法は?

答えて

0

あなたの場合、PhotonNetwork.InstantiateSceneObject()を使用してSceneObjectをインスタンス化し、必要に応じて特定のPlayerで所有権を転送する必要があります。

「DemoChangeOwner」というPUNパッケージで利用できるデモがあります。見てみな。

は、あまりにも、このスレッドを読んで、それが有益だ:例えばhttp://forum.photonengine.com/discussion/1844/photonnetwork-instantiate

、これはこれを行うにはMasterClientの仕事です、そうではないすべてのクライアントが権利を与えています。

さようなら、

ジャンが

+0

おかげであなたの答えのために、生憎i'veはすでにPhotonNetwork.InstantiateSceneObject()、およびtransferingOwnershipを試してみましたが、それは私の問題を解決didn'tの、私はこの問題は、おそらくあると思います私の "つかむオブジェクト"のスクリプトで。 –

関連する問題