我目前正在进行一个联合项目,在这个项目中,我需要从一个JSON文件中更新8个Slider值。我测试了加载部分,一切正常工作,但是当我将值应用到滑块时,它们的行为并不像我想的那样。
我有一个OnButton函数: 1.触发JSON加载-> 2。将加载的JSON值传递给静态变量-> 3。调用一个函数来更新滑块。
现在问题是:在按钮按下,每次只有一个滑块被更新,自上而下,我不明白为什么。因此,为了每次加载json文件,在更新每个滑块之前,必须按最多8次load按钮。当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();
}发布于 2021-01-06 21:02:02
好的,我发现,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还不太了解,无法对此给出一个有教养的猜测。
https://stackoverflow.com/questions/65601706
复制相似问题