我在尝试在多人游戏中改变光线强度时遇到了一个问题。
对于开始游戏的人,主人,光强度变化很好。然而,连接到主机的人,他们的光强度不会改变。
我正在尝试使用[SyncVar]更改光线强度,但是连接到主机的播放器根本没有看到光强度变化。这是我的代码:
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();
}
}
我的问题是光线强度只会改变一个玩家,主人。我想要为连接到游戏的所有玩家改变光强度。欢迎任何建议。
答案 0 :(得分:0)
相当简单的修复 - 如果'isLocalPlayer'为false,则不会给脚本提供替代。
这是一个固定的光变化:
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);
}
}
答案 1 :(得分:0)
我能够通过从这个类中完全删除光强度变化逻辑来解决这个问题。此类现在如下所示:
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;
}
}
我已经将条件更改为我的SpawnManager_waveLevel,现在它正常工作。我希望这能帮助那些面临同样问题的人。
哦,并且该类中的一个重大变化是在方法OnLightAmountChange()中,我不再设置lightAmout = amount;
我现在设置以下内容,因为您可以看到light.intensity = amount;
实际强度。