Unity 多个滑块不会同时更新
Posted
技术标签:
【中文标题】Unity 多个滑块不会同时更新【英文标题】:Unity Multiple sliders dont update at the same time 【发布时间】:2021-04-12 13:11:48 【问题描述】:我目前正在开发一个 Unity 项目,我需要从 JSON 文件中更新 8 个 Slider 值。我测试了加载部分,一切正常,但是当我将值应用于滑块时,它们的行为不像我想象的那样。
我有一个 OnButton 函数:1. 触发 JSON 加载 -> 2. 将加载的 JSON 值传递给静态变量 -> 3. 调用函数来更新滑块。
现在问题出在:按下按钮时,一次只更新一个滑块,从上到下,我不明白为什么。因此,为了每次加载 json 文件,您必须按 LOAD 按钮最多 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();
【问题讨论】:
那么比如按钮点击一次,只更新maxSpeedSlider,点击两次,只更新maxForceSlider?你的滑块最大值是多少,你给他们什么值? 【参考方案1】:好的,我发现,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 的了解不够,无法对此做出有根据的猜测。
【讨论】:
以上是关于Unity 多个滑块不会同时更新的主要内容,如果未能解决你的问题,请参考以下文章
unity android同时调用多个jar,activity间怎么切换
在 Unity 中,为啥我可以通过按下按钮将相机切换到 WorldView,但在使用人脸管理器的同时无法在开始或更新循环中执行此操作?