You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

游戏昼夜循环中0-1滑块值转分钟时间的实现疑问

解决昼夜循环中的分钟计算问题

你的核心问题是没把time对应的24小时的小数部分转换成分钟,这里给你两种可行的计算方式:

方法一:通过总分钟数拆分

先计算对应0-1440分钟(24*60)的总分钟数,再拆分出小时和分钟:

private void ConvertTime()
{
    // 计算总分钟数:0-1对应0-1440分钟
    float totalMinutes = 24 * 60 * time;
    // 取整得到小时数
    hours = Mathf.FloorToInt(totalMinutes / 60);
    // 取余得到分钟数
    minutes = Mathf.FloorToInt(totalMinutes % 60);

    // 处理time超过1的情况(确保小时始终在0-23)
    if (hours >= 24)
        hours = hours % 24;

    // 更新显示,分钟也需要补0
    displayRealTime = LeadingZero(hours.ToString()) + ":" + LeadingZero(minutes.ToString());
}

方法二:拆分小时的整数与小数部分

直接从24*time的结果里拆分整数小时和小数部分,再把小数转成分钟:

private void ConvertTime()
{
    float totalHours = 24 * time;
    // 提取整数部分作为小时
    hours = Mathf.FloorToInt(totalHours);
    // 用小数部分乘以60得到分钟,取整
    minutes = Mathf.FloorToInt((totalHours - hours) * 60);

    // 修正小时溢出
    hours = hours % 24;
    // 分钟本身不会超过60,因为(totalHours - hours)是0-1之间的数,乘60后是0-60,取整后最大59,所以之前的minutes >=60判断可以删掉

    displayRealTime = LeadingZero(hours.ToString()) + ":" + LeadingZero(minutes.ToString());
}

另外补充一个小细节:你的Update方法里,time会随着不断累加超过1,导致小时数超过24,建议在累加时直接取模1,确保time始终在0-1范围内:

private void Update(){
    time = (time + timeRate * Time.deltaTime) % 1f;
    ConvertTime();
}

这样不管timeRate多大,time都会循环在0-1之间,对应0-24小时的循环,不需要在ConvertTime里再处理小时溢出了。

内容的提问来源于stack exchange,提问作者Zartox29

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 18:41:04