三国卡牌客户端基础资源仓库
yyl
2026-02-12 b971112ba92ba116a76a6dfbc2dde3a6f3d34095
Assets/Editor/YooAsset/AddressByRelativePath.cs
@@ -1,19 +1,21 @@
// ============================================================================
// AddressByRelativePath.cs — 自定义 YooAsset 地址规则
// 使用相对于 CollectPath 的完整路径(不含扩展名)作为地址
// 解决同 Package 内不同子目录下同名文件的地址冲突
// 使用相对于 CollectPath 的完整路径(含扩展名)作为地址
// 避免同目录下同名不同扩展名文件的地址冲突
// ============================================================================
using System.IO;
using YooAsset.Editor;
/// <summary>
/// 定位地址 = 资源相对于收集目录的路径(不含扩展名)。
/// 定位地址 = 资源相对于收集目录的路径(含扩展名)。
/// 例如 CollectPath = "Assets/ResourcesOut/Audio"
///      AssetPath  = "Assets/ResourcesOut/Audio/Battle/Effect/boom.wav"
///      → 地址 = "Battle/Effect/boom"
///      → 地址 = "Battle/Effect/boom.wav"
/// 注意:SupportExtensionless 仍会为 AssetPath 自动生成无扩展名映射,
/// 这里仅是 Address 字段保留扩展名以避免冲突。
/// </summary>
[DisplayName("定位地址: 相对路径")]
[DisplayName("定位地址: 相对路径(含扩展名)")]
public class AddressByRelativePath : IAddressRule
{
    string IAddressRule.GetAssetAddress(AddressRuleData data)
@@ -31,13 +33,7 @@
            relativePath = relativePath.Substring(collectRoot.Length);
        }
        // 去掉扩展名
        string ext = Path.GetExtension(relativePath);
        if (!string.IsNullOrEmpty(ext))
        {
            relativePath = relativePath.Substring(0, relativePath.Length - ext.Length);
        }
        // 保留扩展名,避免同名不同类型文件地址冲突
        return relativePath;
    }
}