如何从已标记为Addressable的Scene实例中获取对应的AssetReference?
问题解答
可以获取对应AssetReference,但Scene实例本身没有直接存储Addressable关联信息,需要结合Addressables的资源目录查询能力实现,以下是完整方案:
实现代码
首先引入必要的命名空间:
using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.AddressableAssets; using System.Linq;
你提供的代码段可以按以下逻辑填写:
Scene activeScene = SceneManager.GetActiveScene(); // 获取AssetReference的实现逻辑 AssetReference activeSceneReference = null; // 遍历Addressable资源定位器查找当前场景的对应配置 foreach (var locator in Addressables.ResourceLocators) { // 用场景路径作为默认键查找SceneInstance类型资源 if (locator.Locate(activeScene.path, typeof(SceneInstance), out var locations)) { var targetLoc = locations.FirstOrDefault(); if (targetLoc != null) { // 用资源定位的主键构造AssetReference activeSceneReference = new AssetReference(targetLoc.PrimaryKey); break; } } }
注意事项
- 该方案仅对已标记为Addressable、且对应分组已完成Catalog构建的场景生效
- 如果你给场景设置了自定义的Addressable地址而非默认路径,可以把查询键
activeScene.path替换为activeScene.name尝试匹配 - 如果需要频繁调用该逻辑,建议缓存查询结果,避免多次遍历定位器产生额外性能消耗
内容的提问来源于stack exchange,提问作者jamesplease
相关产品推荐
相关产品推荐

