new_10009_YanCheng_Metrology/Assets/Template/Scripts/HQB/PathUtils.cs

59 lines
1.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
using System.IO;
using System;
public static class PathUtils
{
// 核心方法:获取相对路径(自动处理路径格式)
public static string GetRelativeToStreamingAssets(string targetPath, bool allowOutside = false)
{
string streamingAssetsPath = Application.streamingAssetsPath;
#if UNITY_EDITOR
streamingAssetsPath = "E:\\HQB\\文件打包\\0402\\10002\\App_Data\\StreamingAssets";
#endif
// 规范化路径格式(统一斜杠和大小写)
string normalizedBase = NormalizePath(streamingAssetsPath);
string normalizedTarget = NormalizePath(targetPath);
// 检查是否在StreamingAssets目录下
bool isInside = normalizedTarget.StartsWith(normalizedBase, StringComparison.OrdinalIgnoreCase);
if (isInside)
{
// 直接截取子路径
return normalizedTarget.Substring(normalizedBase.Length + 1);
}
else if (allowOutside)
{
// 使用Uri计算可能包含上级目录的相对路径
return GetRelativePathUsingUri(normalizedBase, normalizedTarget);
}
else
{
Debug.LogError($"路径不在StreamingAssets下: {targetPath}");
return null;
}
}
// 路径规范化工具
private static string NormalizePath(string path)
{
return Path.GetFullPath(path)
.Replace('\\', '/')
.TrimEnd('/')
.ToLower(); // 根据平台需求调整大小写敏感
}
// 使用Uri计算相对路径支持跨目录
private static string GetRelativePathUsingUri(string basePath, string targetPath)
{
var baseUri = new Uri(basePath + "/");
var targetUri = new Uri(targetPath);
Uri relativeUri = baseUri.MakeRelativeUri(targetUri);
string relativePath = Uri.UnescapeDataString(relativeUri.ToString())
.Replace('/', Path.DirectorySeparatorChar);
return relativePath;
}
}