| | |
| | | // ============================================================================ |
| | | // 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) |
| | |
| | | relativePath = relativePath.Substring(collectRoot.Length); |
| | | } |
| | | |
| | | // 去掉扩展名 |
| | | string ext = Path.GetExtension(relativePath); |
| | | if (!string.IsNullOrEmpty(ext)) |
| | | { |
| | | relativePath = relativePath.Substring(0, relativePath.Length - ext.Length); |
| | | } |
| | | |
| | | // 保留扩展名,避免同名不同类型文件地址冲突 |
| | | return relativePath; |
| | | } |
| | | } |