|
需求
游戏中的某项参数,允许玩家自行配置。
提供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{ [SerializeField] private Scrollbar _scrollBar; [SerializeField] 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()); }} |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|