/ / Come inviare un sychronize uno script su una rete di unità di fotoni - c #, unity3d, photon

Come inviare un sychronize uno script su photon unity network - c #, unity3d, photon

Ho un gioco multiplayer che utilizza una torcia e se premo L la torcia si spegne anche sull'altro gioco, ma quando batteryTimeLeft arriva a 20 e lampeggia solo nel gioco locale.

Come faccio a sincronizzare l'intero script con tutti gli utenti in modo che anche lo sfarfallio vada oltre la rete?

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class LightManager : Photon.MonoBehaviour {
public GameObject flashlight;
public Light lightinflashlight;
public bool Lightenabled = true;
public float batteryTimeLeft = 100f;
public float batteryDrainRate;
public float minIntensity = 0.25f;
public float maxIntensity = 8f;
public bool flashlightRanOut = false;
float random;
float noise;
public float time=3;
void start(){
PhotonView photonView = this.photonView;
lightinflashlight = GetComponentInChildren<Light> ();
}
void Update () {
photonView.RPC("publicUpdate", PhotonTargets.All);
}

void FixedUpdate() {

photonView.RPC("publicFixedUpdate", PhotonTargets.All);

}
[PunRPC]
public void publicFixedUpdate(){
batteryTimeLeft -= batteryDrainRate;
if (time < 0) {
time = 0;
}
time--;
}
[PunRPC]
public void publicUpdate(){
if (batteryTimeLeft >= 20) {
flashlight.GetComponent<Light> ().intensity = 8;
flashlightRanOut = false;
}
if (batteryTimeLeft < 0) {
batteryTimeLeft = 0;
flashlightRanOut=true;
}
if (!flashlightRanOut) {
if (batteryTimeLeft <= 20) {
if (time > 1) {
random = Random.Range (0.0f, 150.0f);
noise = Mathf.PerlinNoise (random, Time.time);
flashlight.GetComponent<Light> ().intensity = Mathf.Lerp (minIntensity, maxIntensity, noise);

}
}
if (time < 0) {
time = 3;
}
if (Input.GetKeyDown (KeyCode.L)) {
Lightenabled = ! Lightenabled;
}
flashlight.SetActive (Lightenabled);
} else {
flashlight.SetActive (false);
}
}

}

risposte:

0 per risposta № 1

La soluzione di rete più ottimizzata è quellache sincronizza i dati con una quantità minima di dati trasferiti, basta inviare su rete se la torcia è accesa o spenta e creare timer su entrambi i client, in modo che flashlightRanOut venga generato indipendentemente su entrambi i client, anche il rumore verrà generato su entrambi i client, il sfarfallio differirà un po 'dal momento che usa valori casuali ma non è necessario avere lo sfarfallio perfettamente uguale (è anche impossibile farlo perché il ritardo lo incasina).