/ / Как да изпратите синхронизиране на сценария на мрежата от фотонни единици - c #, unity3d, photon

Как да изпратите синхронизиране на сценария по мрежата за фотонно единство - c #, unity3d, photon

Имам мултиплейър игра, която използва фенерче, и ако натисна L фенерчето се изключва и от другата игра, но кога batteryTimeLeft достига 20, само мига в местната игра.

Как да синхронизирам целия скрипт с всички потребители, така че трептенето също да премине през мрежата?

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);
}
}

}

Отговори:

0 за отговор № 1

Най-оптимизираното мрежово решение е едноче синхронизирането на данните е добро и има най-малко количество прехвърлени данни, просто изпратете през мрежата, ако фенерчето е включено или изключено, и създайте таймери и за двата клиента, така че flashlightRanOut ще се генерира независимо от двата клиента, шумът ще бъде генериран и на двата клиента, трептенето ще се различава малко, тъй като използва произволни стойности, но не е нужно да има трептене напълно същите (също е невъзможно да се направи това, защото забавянето го бърка).