Baste 发表于 2022-5-9 18:38

Unity中,允许用户通过滑动条或输入值的方式设置参数值

需求

游戏中的某项参数,允许玩家自行配置。
提供2种配置方式:滑动条、直接输入。
参数值是有限制范围的(最小最大值)。

示意如下:最小值0.1,最大值10,限制位数为小数点后2位。


在游戏内调整参数值.gif

思路

当玩家通过前述任一一种方式设置值时,需同时修改滑动条(scrollBar)、输入框(inputField)对应的值。
实现

制作一个GameObject,其层级结构如下图


image.png

ConfigParamInputCtr.cs
在Init中传入:最小值、最大值、初始值、限制位数到小数点后几位(至少是0位,即该参数为整数)。
using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;/// <summary>/// 输入配置参数控制:ScrollBar+InputField/// </summary>public class ConfigParamInputCtr : MonoBehaviour{        private Scrollbar _scrollBar;        private InputField _inputField;    private float _cur;    public float Value    {      get { return _cur; }    }    private float Min{ get; set; }    private float Max{ get; set; }    public int DecimalPlaceCnt{ get; set; }    /*    // 测试    private void Start()   {      Init(1, 10, 3, 0);    }    */    private void OnDestroy()    {      Destroy();    }      public void Init(float min, float max, float cur, int decimalPlaceCnt = 2)    {      Min = min;      Max = max;      DecimalPlaceCnt = decimalPlaceCnt;      SetValue(cur);      _scrollBar.onValueChanged.AddListener(OnScrollBarValueChanged);      _inputField.onEndEdit.AddListener(OnInputFieldEndEdit);      _inputField.contentType = InputField.ContentType.DecimalNumber;    }      public void Destroy()    {      _scrollBar.onValueChanged.RemoveListener(OnScrollBarValueChanged);      _inputField.onEndEdit.RemoveListener(OnInputFieldEndEdit);    }    private void OnScrollBarValueChanged(float value)    {      SetValue(Min + (Max - Min) * value);    }    private void OnInputFieldEndEdit(string value)    {      if (float.TryParse(value, out float v))      {            SetValue(v);      }    }    public void SetValue(float value)    {      int factor = (int)(Mathf.Pow(10, DecimalPlaceCnt));      value = (int)(value * factor) / (float)factor;      _cur = Mathf.Clamp(value, Min, Max);      _scrollBar.SetValueWithoutNotify((Value - Min) / (Max - Min));      _inputField.SetTextWithoutNotify(Value.ToString());    }}
页: [1]
查看完整版本: Unity中,允许用户通过滑动条或输入值的方式设置参数值