TDPConscious 2021-07-28 10:41 采纳率: 47.4%
浏览 396
已结题

怎么确定一个float值是否经过某值?

比如判断这个动态float值是否经过0.5f
因为float值不准确所以当前的方法是范围 0.501f至0.499f之间 问题也出现在这
动态float的来源是一个拖动条 也就是用户 无法避免的可能手抖 将会导致到达区间后没出去,原路返回,这个时候事件不应触发,所以我加了bool判断
但这样就会导致必须经过区间两点才能触发事件 这样就会导致另一个问题
用户是可以通过点击来使float直接到达某值的 直接点击区间内就会导致bool失效

其次在此基础上 最好能知道经过区间时的方向(从左至右经过区间或从右至左)当前用的方法是bool开关 ,但也无法解决值直接出现在区间内时的BUG(可以通过移动之前存值,移动后更新BOOL状态来解决这个问题,但逻辑会变得更复杂BUG会更多),我觉得单纯是我想的复杂了,应该会有简单的方法能做到,只是我没反应过来。望各位给个逻辑清晰的思路或者方案

  • 写回答

7条回答 默认 最新

  • dark9spring 2021-07-30 17:13
    关注
    
    using UnityEngine;
    using Random = UnityEngine.Random;
    
    public class TestConstraint : MonoBehaviour
    {
        /// <summary>
        /// 模拟Slider的数值
        /// </summary>
        private float simulateNum;
    
        /// <summary>
        /// true为当前值大于0.5f
        /// </summary>
        private bool? flag;
    
        /// <summary>
        /// true为之前值大于0.5f
        /// </summary>
        private bool? oldFlag;
        private void Awake()
        {
            simulateNum = 0f;
            flag = false;
            oldFlag = null;
        }
    
        private void Update()
        {
            oldFlag = simulateNum > 0.5f;
            if (!Input.GetKeyDown(KeyCode.A)) return;
            simulateNum = Random.Range(0f, 1f);
            flag = simulateNum > 0.5f;
            Debug.Log("flag="+flag);
            Debug.Log("oldFlag="+oldFlag.Value);
            if (flag!=oldFlag)
            {
                Debug.Log("经过了0.5这个值");
            }
            Debug.Log("simulateNum="+simulateNum);
        }
    }
    
    

    大概模拟一下就是这样的,你试试,我这边没问题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月4日
  • 已采纳回答 8月4日
  • 修改了问题 7月28日
  • 创建了问题 7月28日

悬赏问题

  • ¥15 数据库数据成问号了,前台查询正常,数据库查询是?号
  • ¥15 算法使用了tf-idf,用手肘图确定k值确定不了,第四轮廓系数又太小才有0.006088746097507285,如何解决?(相关搜索:数据处理)
  • ¥15 彩灯控制电路,会的加我QQ1482956179
  • ¥200 相机拍直接转存到电脑上 立拍立穿无线局域网传
  • ¥15 (关键词-电路设计)
  • ¥15 如何解决MIPS计算是否溢出
  • ¥15 vue中我代理了iframe,iframe却走的是路由,没有显示该显示的网站,这个该如何处理
  • ¥15 操作系统相关算法中while();的含义
  • ¥15 CNVcaller安装后无法找到文件
  • ¥15 visual studio2022中文乱码无法解决