Unity中触控板Y轴映射控制Slider值无效问题求助
问题根因
代码赋值逻辑完全写反,且未做输入值范围适配,导致Slider值从未被输入更新:
- 核心逻辑错误:当前代码
screenPosition.y = slider.value是把Slider已有值赋值给输入坐标变量,全程没有把触控板/鼠标的输入值赋值给slider.value,控件自然不会变动 - 取值范围不匹配:
Input.mousePosition.y返回的是屏幕像素坐标,取值范围为0~当前屏幕高度像素值(例如1080P屏幕取值为0~1080),但Slider默认value范围为0~1,直接赋值会出现值溢出,滑块会直接卡在边界位置
修正代码
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class SliderControl : MonoBehaviour { private Slider slider; // 可根据实际需求自定义滑块取值范围 public float minSliderVal = 0f; public float maxSliderVal = 1f; void Start() { slider = GetComponent<Slider>(); slider.minValue = minSliderVal; slider.maxValue = maxSliderVal; } void Update() { // 将Y轴像素坐标归一化后映射到滑块取值区间 float yNormalized = Input.mousePosition.y / Screen.height; slider.value = Mathf.Lerp(minSliderVal, maxSliderVal, yNormalized); // 调试日志,功能正常后可注释 Debug.Log($"滑块当前值:{slider.value}"); } }
额外配置核对项
- 确认脚本直接挂载在Slider UI对象上,否则
GetComponent<Slider>()无法正确获取组件 - 如果不需要光标全屏位置对应滑块值,而是要触控板滑动增量控制滑块,可以把逻辑改成读取输入轴
Input.GetAxis("Mouse Y")做增量累加,再赋值给slider.value - 如果需要识别触控板手势(比如双指滑动),
Input.mousePosition无法实现,需要接入对应平台的原生输入接口
内容的提问来源于stack exchange,提问作者newdevnoob
相关产品推荐
相关产品推荐

