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

怎么确定一个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条)

相关推荐 更多相似问题