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 对于知识的学以致用的解释
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败