hello all,
Weel clone builds dont create for player after join another room if others players have build, but after connect is good , problem is if anoher join dont go see was build ;( but if are connect is good
Script PhotonPlayerHandlers
- SCRIPT PhotonHandlers
tobias Please help me
Weel clone builds dont create for player after join another room if others players have build, but after connect is good , problem is if anoher join dont go see was build ;( but if are connect is good
Script PhotonPlayerHandlers
public class PhotonPlayerHandlers : Photon.MonoBehaviour
{
#region Private Fields
private PhotonHandlers Handlers;
#endregion Private Fields
#region Private Methods
private void Awake()
{
Handlers = FindObjectOfType<PhotonHandlers>();
}
private void Start()
{
if (!photonView.isMine)
{
if (PhotonNetwork.isMasterClient)
{
if (Handlers != null)
{
photonView.RPC("RequestSyncPlacement", PhotonTargets.AllBuffered);
}
}
return;
}
SimpleCampfire.OnInterracted += OnInterracted;
EbsEvents.OnBuildPrefabPlaced += OnPrefabPlaced;
EbsEvents.OnBuildPrefabDestroyed += OnPrefabDestroyed;
}
private void OnInterracted(EbsPrefab prefab)
{
if (prefab == null)
{
return;
}
}
private void OnPrefabPlaced(EbsPrefab originPrefab, EbsPrefab placedPrefab)
{
if (!photonView.isMine)
{
return;
}
if (placedPrefab == null)
{
return;
}
placedPrefab.EntityInstanceId = placedPrefab.GetInstanceID();
if (Handlers != null)
{
photonView.RPC("RequestNewPlacement", PhotonTargets.OthersBuffered, placedPrefab.Id, placedPrefab.GetInstanceID(), placedPrefab.transform.position, placedPrefab.transform.rotation, false);
}
}
private void OnPrefabDestroyed(EbsPrefab prefab)
{
if (!photonView.isMine)
{
return;
}
if (prefab == null)
{
return;
}
if (Handlers != null)
{
photonView.RPC("RequestNewDestruction", PhotonTargets.OthersBuffered, prefab.EntityInstanceId);
}
}
#endregion Private Methods
#region Public Methods
#region Rpcs
[PunRPC]
public void RequestSyncPlacement(PhotonMessageInfo info)
{
foreach (EntityData PrefabData in Handlers.NetworkEntities)
{
if (PrefabData != null)
{
if (PhotonNetwork.isMasterClient)
{
return;
}
EbsPrefab PrefabTemp = EbsManager.Instance.GetPrefab(PrefabData.Id);
PrefabTemp.EntityInstanceId = PrefabData.InstanceId;
Instantiate(PrefabTemp.gameObject, PrefabData.Position, PrefabData.Rotation);
}
}
}
[PunRPC]
public void RequestNewPlacement(int prefabId, int instanceId, Vector3 position, Quaternion rotation, bool sync, PhotonMessageInfo info)
{
Handlers.AddNetworkEntity(new EntityData(prefabId, instanceId, position, rotation));
EbsPrefab PrefabTemp = EbsManager.Instance.GetPrefab(prefabId);
PrefabTemp.EntityInstanceId = instanceId;
Instantiate(PrefabTemp.gameObject, position, rotation);
}
[PunRPC]
public void RequestNewDestruction(int instanceId, PhotonMessageInfo info)
{
Handlers.RemoveNetworkEntity(instanceId);
foreach (EbsPrefab prefab in FindObjectsOfType<EbsPrefab>())
{
if (prefab != null)
{
if (prefab.EntityInstanceId == instanceId)
{
Destroy(prefab.gameObject);
}
}
}
}
#endregion
#endregion Public Methods
}
- SCRIPT PhotonHandlers
public class PhotonHandlers : Photon.MonoBehaviour
{
public List<EntityData> NetworkEntities = new List<EntityData>();
public void AddNetworkEntity(EntityData data)
{
if (!PhotonNetwork.isMasterClient)
{
return;
}
if (data == null)
{
return;
}
NetworkEntities.Add(new EntityData(data.Id, data.InstanceId, data.Position, data.Rotation));
}
public void RemoveNetworkEntity(int instanceId)
{
if (!PhotonNetwork.isMasterClient)
{
return;
}
foreach (var Entity in NetworkEntities)
{
if (Entity != null)
{
if (Entity.InstanceId == instanceId)
{
NetworkEntities.Remove(Entity);
break;
}
}
}
}
}
tobias Please help me