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