C# Unity多个滑块不会同时更新
我目前正在一个Unity项目中工作,需要从JSON文件中更新8个滑块值。我测试了加载部分,一切正常,但当我将这些值应用于滑块时,它们的行为与我想象的不一样 我有一个OnButton函数:1。触发JSON加载->2。将加载的JSON值传递给静态变量->3。调用函数以更新滑块 现在问题来了:按下按钮时,每次只更新一个滑块,从上到下,我不明白为什么。因此,每次加载json文件时,在更新每个滑块之前,必须最多按8次加载按钮。当UI加载并在那里工作时,我使用相同的LoadSliders函数 谢谢你的帮助C# Unity多个滑块不会同时更新,c#,unity3d,user-interface,C#,Unity3d,User Interface,我目前正在一个Unity项目中工作,需要从JSON文件中更新8个滑块值。我测试了加载部分,一切正常,但当我将这些值应用于滑块时,它们的行为与我想象的不一样 我有一个OnButton函数:1。触发JSON加载->2。将加载的JSON值传递给静态变量->3。调用函数以更新滑块 现在问题来了:按下按钮时,每次只更新一个滑块,从上到下,我不明白为什么。因此,每次加载json文件时,在更新每个滑块之前,必须最多按8次加载按钮。当UI加载并在那里工作时,我使用相同的LoadSliders函数 谢谢你的帮助
using UnityEngine;
using UnityEngine.UI;
.
.
.
public void UpdateSettings(BoidPresetSaveData loadedSave)
{
maxSpeed = loadedSave.maxSpeed;
maxForce = loadedSave.maxForce;
arriveRadius = loadedSave.arriveRadius;
desiredSeparation = loadedSave.desiredSeparation;
neighbourDistance = loadedSave.neighbourDistance;
//Weights
separation = loadedSave.separation;
alignment = loadedSave.alignment;
cohesion = loadedSave.cohesion;
wander = loadedSave.wander;
avoidWalls = loadedSave.avoidWalls;
}
public void LoadSliders()
{
maxSpeedSlider.value = maxSpeed;
maxForceSlider.value = maxForce;
arriveRadiusSlider.value = arriveRadius;
desiredSeperationSlider.value = desiredSeparation;
neighbourDistanceSlider.value = neighbourDistance;
separationSlider.value = separation;
alignmentSlider.value = alignment;
cohesionSlider.value = cohesion;
wanderSlider.value = wander;
avoidWallsSlider.value = avoidWalls;
}
此外,OnButton功能也不是很奇特:
public void LoadPreset()
{
var loadKey = presetDropdown.captionText.text;
if (!SaveManager.SaveExists(loadKey,folderKey))
{
Debug.Log("Preset file does not exist.");
return;
}
BoidPresetSaveData loadedSave = SaveManager.Load<BoidPresetSaveData>(loadKey, folderKey);
BoidSettings.instance.UpdateSettings(loadedSave);
BoidSettings.instance.LoadSliders();
}
public void LoadPreset()
{
var loadKey=presetDropdown.captionText.text;
如果(!SaveManager.SaveExists(loadKey、folderKey))
{
Log(“预设文件不存在”);
返回;
}
BoidPresetSaveData loadedSave=SaveManager.Load(loadKey,folderKey);
BoidSettings.instance.UpdateSettings(loadedSave);
BoidSettings.instance.LoadSliders();
}
好的,我发现slider.value调用也会调用OnSliderChange事件。考虑到这一点,上面的代码不起作用,因为您在那里创建了一种循环。
我还谎称这在Gui负载上有效,只是测试不够。
我必须拆分UpdateSettings函数,以便每个滑块都有自己的OnSliderChange方法。因此,函数代码如下所示:
public void UpdateMaxSpeed()
{
maxSpeed = maxSpeedSlider.value;
}
public void UpdateMaxForce()
{
maxForce = maxForceSlider.value;
}
public void UpdateArriveRadius()
{
arriveRadius = arriveRadiusSlider.value;
}public void UpdateDesiredSeparation()
{
desiredSeparation = desiredSeperationSlider.value;
}
public void UpdateNeighbourDistance()
{
neighbourDistance = neighbourDistanceSlider.value;
}
public void UpdateSeparation()
{
separation = separationSlider.value;
}
public void UpdateAlignment()
{
alignment = alignmentSlider.value;
}
public void UpdateCohesion()
{
cohesion = cohesionSlider.value;
}
public void UpdateWander()
{
wander = wanderSlider.value;
}
public void UpdateAvoidWalls()
{
avoidWalls = avoidWallsSlider.value;
}
也许有更简洁的方法,但我对C#和Unity的了解还不够,无法给出有根据的猜测。例如,单击按钮一次后,只更新maxSpeedSlider,单击两次后,只更新maxForceSlider?你的滑块最大值是多少?你给它们的值是多少?