0

懐中電灯を使用するマルチプレイヤー ゲームがあり、懐中電灯を押すとL、他のゲームでも消灯しますが、batteryTimeLeft20 に達すると、ローカル ゲームでのみちらつきます。

このスクリプト全体をすべてのユーザーと同期して、ちらつきがネットワーク経由でも発生するようにするにはどうすればよいですか?

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

}
4

1 に答える 1

0

最も最適化されたネットワーク ソリューションは、データを適切に同期し、転送されるデータの量が最も少ないソリューションです。懐中電灯がオンまたはオフの場合はネットワーク経由で送信し、両方のクライアントでタイマーを作成するため、flashlightRanOut は両方のクライアントで個別に生成されます。両方のクライアントでも生成されますが、ちらつきはランダムな値を使用するため少し異なりますが、ちらつきが完全に同じである必要はありません (遅延が混乱するため、これを行うことも不可能です)。

于 2015-10-28T22:04:33.387 に答える