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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity中,允许用户通过滑动条或输入值的方式设置参数值相关的知识,希望对你有一定的参考价值。

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

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

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

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

ConfigParamInputCtr.cs
在Init中传入:最小值、最大值、初始值、限制位数到小数点后几位(至少是0位,即该参数为整数)。

unity_UGUI养成之路03

关卡分页设计

功能1:通过直接滑动

添加自动排序组件

设置通过添加组件设置内容的滑动,多余内容的隐藏

  功能2:通过点击下面的圆圈滑动

上述代码实现:

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class LevelButtonScrollRect : MonoBehaviour ,IBeginDragHandler,IEndDragHandler
{
    private ScrollRect scrollRect;

    public float smoothing = 4; //插值的速度
    private float[] pageArray=new float[]{ 0,0.33333f,0.66666f,1 }; //每个页面X轴坐标

    
    private float targetHorizontalPosition=0; //距离最近页面的X坐标
    private bool isDraging = false; //是否拖拽的标志位

    public Toggle[] toggleArray; //圆圈数组
    
    void Start ()
    {
        scrollRect = GetComponent<ScrollRect>();
    }
    
    void Update ()
    {
        if(isDraging==false)
            scrollRect.horizontalNormalizedPosition = Mathf.Lerp(scrollRect.horizontalNormalizedPosition,
                targetHorizontalPosition, Time.deltaTime*smoothing);
    }


    public void OnBeginDrag(PointerEventData eventData)
    {
        isDraging = true;
    }

    public void OnEndDrag(PointerEventData eventData)
    {
        isDraging = false;
        //找到当前位置与每页距离最小的页面,并切换到该页面
        float posX = scrollRect.horizontalNormalizedPosition;
        int index = 0;
        float offset = Mathf.Abs(pageArray[index] - posX);
        for (int i = 1; i < pageArray.Length; i++)
        {
            float offsetTemp = Mathf.Abs(pageArray[i] - posX);
            if (offsetTemp < offset)
            {
                index = i;
                offset = offsetTemp;
            }
        }
        targetHorizontalPosition = pageArray[index];
        toggleArray[index].isOn = true;
        //scrollRect.horizontalNormalizedPosition = pageArray[index];
    }
    public void MoveToPage1(bool isOn) {
        if (isOn)
        {
            targetHorizontalPosition = pageArray[0];
        }
    }
    public void MoveToPage2(bool isOn) {
        if (isOn) {
            targetHorizontalPosition = pageArray[1];
        }

    }
    public void MoveToPage3(bool isOn) {
        if (isOn)
        {
            targetHorizontalPosition = pageArray[2];
        }

    }
    public void MoveToPage4(bool isOn) {

        if (isOn)
        {
            targetHorizontalPosition = pageArray[3];
        }
    }
}
 

以上是关于Unity中,允许用户通过滑动条或输入值的方式设置参数值的主要内容,如果未能解决你的问题,请参考以下文章

Python Qt GUI设计:QSlider滑动条类(基础篇—16)

Python Qt GUI设计:QSlider滑动条类(基础篇—16)

Linux root设置初始值的方法

unity_UGUI养成之路03

如何使 Unity 3D 输入字段支持的 Windows 10 触摸键盘滑动和预测?

在 ClearQuest 中,我如何在 SQL 编辑器中生成一个允许我提示用户输入值的查询?