Unity C#脚本优化:如何复用数值格式化函数减少冗余代码?
复用数字格式化逻辑的解决方案
核心思路是把你的格式化逻辑封装成一个独立的可复用函数,所有需要格式化的成本值直接调用这个函数即可,彻底避免重复的if-else代码。
通用实现步骤
- 编写一个接收数值参数的函数,内部实现完整的格式化逻辑
- 所有需要展示的成本值(如
upgrade1Cost、upgrade2Cost)都调用该函数获取格式化后的字符串
具体代码示例
JavaScript版本(适用于网页游戏、Node.js环境)
function formatGameNumber(num) { // 处理百万及以上 if (num >= 1000000) { return (num / 1000000).toFixed(1) + 'M'; } // 处理万到百万之间 else if (num >= 10000) { return (num / 1000).toFixed(1) + 'K'; } // 处理千到万之间的千分位 else if (num >= 1000) { return num.toLocaleString(); } // 小于1000直接返回原数字字符串 else { return num.toString(); } } // 调用示例 const upgrade1Cost = 12500; const upgrade2Cost = 3500000; const upgrade3Cost = 4500; console.log(formatGameNumber(upgrade1Cost)); // 输出 "12.5K" console.log(formatGameNumber(upgrade2Cost)); // 输出 "3.5M" console.log(formatGameNumber(upgrade3Cost)); // 输出 "4,500"
C#版本(适用于Unity、Unreal等游戏引擎)
using System; // 做成静态类方便全局调用 public static class GameNumberFormatter { public static string FormatCost(double cost) { if (cost >= 1000000) { return $"{cost / 1000000:F1}M"; } else if (cost >= 10000) { return $"{cost / 1000:F1}K"; } else if (cost >= 1000) { // N0 表示千分位格式,无小数位 return cost.ToString("N0"); } else { return cost.ToString(); } } } // 调用示例(Unity中可在MonoBehaviour里使用) double upgrade1Cost = 12500; double upgrade2Cost = 3500000; Debug.Log(GameNumberFormatter.FormatCost(upgrade1Cost)); // 输出 "12.5K" Debug.Log(GameNumberFormatter.FormatCost(upgrade2Cost)); // 输出 "3.5M"
扩展优化建议
- 如果需要支持更大的单位(如十亿
B、万亿T),只需在函数中添加对应的条件分支即可,所有调用处无需修改 - 可以把小数位数做成可选参数,让格式化更灵活:
// 优化后的JS函数,支持自定义小数位 function formatGameNumber(num, decimalPlaces = 1) { if (num >= 1000000) { return (num / 1000000).toFixed(decimalPlaces) + 'M'; } // 其余逻辑同理 } - 若成本值是整数类型(如
int、long),只需将函数参数类型对应调整即可,内部逻辑无需大改
内容的提问来源于stack exchange,提问作者yeelowsnow
相关产品推荐
相关产品推荐

