SystemExtensions

5 阅读4分钟

概述(Overview)  

SystemExtensions 是一个 Unity 系统级通用扩展方法 静态类,位于 PFGameFramework.Library 命名空间。

主要功能覆盖:

  • 游戏退出、全屏设置
  • 时间格式转换(秒 ↔ HH:mm:ss)
  • 时间戳获取
  • 文件编码转换(GB2312 → UTF-8)
  • 场景加载快捷方法
  • 当前时间 / 游戏运行时间获取
  • StreamingAssets 文件打开/下载
  • 二进制 & JSON 序列化/反序列化
  • 简单网络通信(TCP 客户端:连接、发送、接收)
  • 固定长度包(1024字节)的分包发送机制

适用于:

  • 系统控制(退出、全屏)
  • 时间显示与计算
  • 本地文件处理
  • 数据存档/读档
  • 轻量级 C/S 网络通信(教学、实验、远程控制等场景)

依赖

  • UnityEngine、UnityEngine.SceneManagement、UnityEngine.UI
  • Cysharp.Threading.Tasks(UniTask 异步支持)
  • System.Net.Sockets(TCP 通信)

方法一览(API Index)

方法名类型异步返回类型主要功能典型用途
QuitGamestaticvoid退出游戏(Application.Quit)退出按钮
FullScreenstaticvoid设置为全屏并使用最高分辨率首页/启动时全屏
SecondsToHH_MM_SSstaticstring秒数 → "HH:mm:ss" 格式字符串倒计时、计时器显示
hh_mm_ssToSecondsstaticint"HH:mm:ss" → 总秒数时间字符串解析
GetTimeStampstaticlong获取当前 UTC 时间戳(毫秒)记录时间、日志、同步
ChangeFormatstaticvoid将文件从 GB2312 编码转为 UTF-8(覆盖原文件)处理老旧中文文本文件
LoadScenestaticvoid为指定名称按钮绑定场景加载事件按钮跳转场景
GetNowTime / GetGameTimestaticvoid打印当前时间 / 游戏运行时间调试
DownLoadFileFromAppstaticvoid打开 StreamingAssets 中的文件(模拟下载)打开说明文档、CSV 等
OpenFilestaticvoid使用系统默认程序打开指定路径文件打开本地文件
Serialize / DeSerializestaticbyte[] / T二进制序列化/反序列化(BinaryFormatter)对象存档(旧方式)
SerializeViaJson / DeSerializeViaJsonstaticbyte[] / TJSON 序列化/反序列化(JsonUtility)推荐的轻量存档方式
WriteObjToJsonFilestaticbool对象 → JSON → 保存到文件数据存档
ReadJsonFileAsObjectstaticT从 JSON 文件读取并反序列化为对象数据读档
ConnectToServerAsyncstaticUniTask<(bool, Socket, string)>异步连接指定 IP:Port 的 TCP 服务器建立连接
SendMsgAsyncstatic(bool, string)发送文本命令(前置 3 位长度 + 内容)发送简单指令
ReceiveMessageEveryUpdatestaticUniTaskVoid每帧接收服务器数据,解析命令(带缓冲区防粘包)持续接收消息
SendBytesstaticUniTask分包发送固定 1024 字节包(A/P/E 标志)大数据可靠传输

方法详情

时间相关

SecondsToHH_MM_SS

/// <summary>
/// 将秒数转换为 "HH:mm:ss" 格式字符串
/// </summary>
/// <param name="number">秒数(float)</param>
/// <returns>格式化时间字符串</returns>
public static string SecondsToHH_MM_SS(float number)

示例:

"3600".SecondsToHH_MM_SS() → "01:00:00"

hh_mm_ssToSeconds

/// <summary>
/// 将 "HH:mm:ss" 格式字符串转换为总秒数
/// </summary>
public static int hh_mm_ssToSeconds(string timeStr)

GetTimeStamp

/// <summary>
/// 获取当前 UTC 时间戳(毫秒)
/// </summary>
public static long GetTimeStamp()

文件与编码

ChangeFormat

/// <summary>
/// 将指定文件从 GB2312 编码转换为 UTF-8(覆盖原文件)
/// </summary>
public static void ChangeFormat(string sourceFilePath)

用途:处理老旧中文 TXT/CSV 文件乱码问题。

DownLoadFileFromApp / OpenFile

public static void DownLoadFileFromApp(string fileName)           // StreamingAssets/xxx
public static void OpenFile(string fileName)                      // 任意路径

用途:打开说明文档、CSV、PDF 等文件。


序列化 / 存档

WriteObjToJsonFile / ReadJsonFileAsObject

/// <summary>
/// 对象 → JSON → 保存到文件
/// </summary>
public static bool WriteObjToJsonFile<T>(string path, T obj)

/// <summary>
/// 从 JSON 文件读取并反序列化为对象
/// </summary>
public static T ReadJsonFileAsObject<T>(string path)

推荐:使用 JsonUtility 进行轻量存档,性能好且易读。


网络通信(TCP 客户端)

ConnectToServerAsync

/// <summary>
/// 异步连接指定 IP 和端口的 TCP 服务器
/// </summary>
/// <returns>(连接成功与否, Socket 对象, 错误信息)</returns>
public static async UniTask<(bool state, Socket socket, string info)> ConnectToServerAsync(string ip, int port)

SendMsgAsync

/// <summary>
/// 发送文本命令(前 3 位为内容长度 + 内容)
/// </summary>
public static (bool state, string error) SendMsgAsync(string cmdStr, ref Socket clientSocket)

ReceiveMessageEveryUpdate

/// <summary>
/// 每帧接收服务器数据,自动处理粘包(使用 ReceiveBuffer 缓冲)
/// 解析后调用 ParseString(str)
/// </summary>
public static async UniTaskVoid ReceiveMessageEveryUpdate(Socket clientSocket, CancellationToken ct)

SendBytes

/// <summary>
/// 可靠分包发送大数据(每包 1024 字节,A/P/E 标志)
/// </summary>
/// <returns>1=成功, 0=失败</returns>
public static async UniTask<int> SendBytes(List<byte> SendListBuffer, Socket sendSocket)

包格式

  • A:完整包(1023 字节有效数据)
  • P:部分包(含长度前缀 + 补齐字节)
  • E:结束包(标志结束)