版本:Unity 6(6000.0)
语言英语
  • C#

AssetDatabase.CanOpenAssetInEditor

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实会阅读用户提出的每项修改建议,并在适用情况下进行更新。

关闭

提交失败

由于某些原因,无法提交您的修改建议。请在几分钟后<a>重试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public static bool CanOpenAssetInEditor(int instanceID);

参数

instanceID 资产的实例 ID。

返回

bool 如果 Unity 可以在编辑器中成功打开该资产,则返回 true,否则返回 false。

介绍

检查 Unity 是否可以在编辑器中打开资产。

如果执行 AssetDatabase.OpenAsset,则检查 Unity 是否可以在编辑器中打开给定的资产实例。注意:必须将资产写入磁盘,否则此函数始终返回 false。

using UnityEditor;
using UnityEditor.Callbacks;
using UnityEngine;

[CreateAssetMenu(fileName = "MyObject", menuName = "ScriptableObjects/MyObject", order = 1)] public class MyObject : ScriptableObject { public string myData;

[OnOpenAsset] public static bool Open(int instanceID) { if (AssetDatabase.GetMainAssetTypeAtPath(AssetDatabase.GetAssetPath(instanceID)) == typeof(MyObject)) { Debug.Log("Opening asset"); return true; } else return false; // This method doesn't handle opening of different asset types }

[OnOpenAsset(OnOpenAssetAttributeMode.Validate)] public static bool WillOpen(int instanceID) { if (AssetDatabase.GetMainAssetTypeAtPath(AssetDatabase.GetAssetPath(instanceID)) == typeof(MyObject)) { // We can open MyObject asset using MyObject opening method Debug.Log("This asset can be opened by OnOpenAsset marked method"); return true; } else return false; // The passed instance doesn't belong to MyObject type asset so we won't be able to open it using opening method inside MyObject }

[MenuItem("Test/WillOpenInUnity")] public static void WillSelectionBeOpenedInUnity() { AssetDatabase.CanOpenAssetInEditor(Selection.activeObject.GetInstanceID()); } }