Как правильно создать игровой объект в Photon Unity Network?

    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 объекта в одном месте, которые оба видны всем игрокам. Один игрок может перемещать один из этих объектов и не может контролировать другого, а ситуация для второго игрока противоположна. Как сделать так, чтобы был только один экземпляр объекта, который может контролироваться (перемещаться с помощью другого скрипта, который у меня есть) всеми игроками?

1 ответ

В вашем случае вам нужно создать экземпляр объекта SceneObject с помощью PhotonNetwork.InstantiateSceneObject(), а затем при необходимости передать TransferOwnership конкретному проигрывателю.

В пакете PUN доступна демоверсия под названием "DemoChangeOwner". Проверьте это.

Также прочтите эту ветку, она информативна: http://forum.photonengine.com/discussion/1844/photonnetwork-instantiate

например, это работа MasterClient, чтобы сделать это, поэтому не все клиенты имеют право.

До свидания,

джинсовый

Другие вопросы по тегам