首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >统一多滑块不同时更新

统一多滑块不同时更新
EN

Stack Overflow用户
提问于 2021-01-06 18:51:52
回答 1查看 128关注 0票数 0

我目前正在进行一个联合项目,在这个项目中,我需要从一个JSON文件中更新8个Slider值。我测试了加载部分,一切正常工作,但是当我将值应用到滑块时,它们的行为并不像我想的那样。

我有一个OnButton函数: 1.触发JSON加载-> 2。将加载的JSON值传递给静态变量-> 3。调用一个函数来更新滑块。

现在问题是:在按钮按下,每次只有一个滑块被更新,自上而下,我不明白为什么。因此,为了每次加载json文件,在更新每个滑块之前,必须按最多8次load按钮。当UI加载并在那里工作时,我使用相同的LoadSliders函数。

谢谢你的帮忙!

代码语言:javascript
复制
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函数也不是很花哨:

代码语言:javascript
复制
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();
}
EN

回答 1

Stack Overflow用户

发布于 2021-01-06 21:02:02

好的,我发现,slider.value调用也调用OnSliderChange事件。考虑到这一点,上面的代码是没有功能的,因为您在那里创建了一种循环。我还撒谎说,这是在Gui负载上工作的,我只是没有进行足够的测试。我必须拆分UpdateSettings函数,以便每个滑块都有自己的OnSliderChange方法。所以功能代码如下所示:

代码语言:javascript
复制
 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还不太了解,无法对此给出一个有教养的猜测。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65601706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档