2017-03-29 5 views
0

Ich stehe derzeit vor einem Problem, wenn ich versuche, die Intensität meines Lichts im Mehrspielermodus zu ändern.Ändern der Lichtstärke Unity Multiplayer

Die Lichtintensitäten ändert sich gut für die Person, die das Spiel, den Host, startet. Aber die Leute, die sich mit dem Wirt verbinden, ändern ihre Lichtintensität nicht.

Ich versuche, die Lichtintensität mit [SyncVar] zu ändern, aber der Spieler, der sich mit dem Host verbindet, sieht die Lichtintensitätsänderung überhaupt nicht. Hier ist mein Code:

using UnityEngine; 
using System.Collections; 
using UnityEngine.Networking; 

public class dayNightCycle : NetworkBehaviour { //changes day and night based on the wavelevel SpawnManager_waveLevel.cs script 

    Light light; 
    float fadeTime = 1f; 
    [SyncVar(hook = "OnLightAmountChange")] 
    float lightAmout = 0f; 
    SpawnManager_waveLevel level; 

    public override void OnStartLocalPlayer() 
    { 
     light = GetComponentInChildren<Light>(); 
     level = GetComponent<SpawnManager_waveLevel>(); 
     light.intensity = lightAmout; 
    } 

    // Update is called once per frame 
    void Update() { 

     changeLight(); 
    } 

    void changeLight() 
    { 
     if (isLocalPlayer) 
     { 
      if (level.waveCounter == 1) 
      { 
       lightAmout = 0.03f; 
       light.intensity = Mathf.Lerp(light.intensity, lightAmout, fadeTime * Time.deltaTime); 
      } 
      else 
      { 
       lightAmout = 1f; 
       light.intensity = Mathf.Lerp(light.intensity, lightAmout, fadeTime * Time.deltaTime); 
      } 
     } 
    } 

    void OnLightAmountChange(float amount) 
    { 
     lightAmout = amount; 
     changeLight(); 
    } 
} 

Mein Problem ist, dass die Lichtintensität ändert sich nur für einen Spieler, den Host. Ich möchte, dass sich die Lichtintensität für alle Spieler ändert, die sich mit dem Spiel verbinden. Irgendwelche Vorschläge sind willkommen.

Antwort

0

Ziemlich einfache Lösung - Sie geben dem Skript keine Alternative, wenn 'isLocalPlayer' falsch ist.

Hier ist ein fester Lichtwechsel für Sie:

void changeLight() 
{ 
    if (isLocalPlayer) 
    { 
     if (level.waveCounter == 1) 
     { 
      lightAmout = 0.03f; 
      light.intensity = Mathf.Lerp(light.intensity, lightAmout, fadeTime * Time.deltaTime); 
     } 
     else 
     { 
      lightAmout = 1f; 
      light.intensity = Mathf.Lerp(light.intensity, lightAmout, fadeTime * Time.deltaTime); 
     } 
    } 
    else{ 
     // If not a local player, simply update to the new light intensity. 
     light.intensity = Mathf.Lerp(light.intensity, lightAmout, fadeTime * Time.deltaTime); 
    } 
} 
+0

Ich fürchte, das wird nicht funktionieren, weil ich eine OnStartLocalPlayer() -Methode habe, was bedeutet, dass die else-Anweisung, die du komponiert hast, das Lichtobjekt nicht finden wird. – arjwolf

0

ich in der Lage war, dieses Problem zu beheben, indem Sie vollständig die Lichtintensität ändert Logik von dieser Klasse zu entfernen. Diese Klasse sieht nun wie folgt aus:

using UnityEngine; 
using System.Collections; 
using UnityEngine.Networking; 

public class dayNightCycle : NetworkBehaviour { //changes day and night based on the wavelevel SpawnManager_waveLevel.cs script 

    [SerializeField] 
    public Light light; 

    [SerializeField] 
    SpawnManager_waveLevel level; 

    [SyncVar(hook = "OnLightAmountChange")] 
    public float lightAmout = 0f; 

    public override void OnStartLocalPlayer() 
    { 
     OnLightAmountChange(lightAmout); 
    } 

    void OnLightAmountChange(float amount) 
    { 
     light.intensity = amount; 
    } 
} 

Ich habe weitergemacht und die Bedingung stellen die Lichtintensität in meine SpawnManager_waveLevel zu ändern und jetzt funktioniert es gut. Ich hoffe, dass dies demjenigen helfen wird, der mit dem gleichen Problem konfrontiert war wie ich.

oh und auch eine große Änderung in dieser Klasse war in der Methode OnLightAmountChange(), ich nicht mehr lightAmout = amount; eingestellt Ich stelle jetzt Folgendes, wie Sie sehen können light.intensity = amount; Die tatsächliche Intensität.

Verwandte Themen