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 多个滑块不会同时更新的主要内容,如果未能解决你的问题,请参考以下文章

多个存储过程如何同时更新同一行?

Unity3d如何同时打开多个项目

unity android同时调用多个jar,activity间怎么切换

在 Unity 中,为啥我可以通过按下按钮将相机切换到 WorldView,但在使用人脸管理器的同时无法在开始或更新循环中执行此操作?

unity滑块控制动画

图像滑块:保持所有图像的高度相同,同时保持滑块响应