游戏昼夜循环中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
相关产品推荐
相关产品推荐

