Unity中CompilationPipeline.GetAssemblyNameFromScriptPath无法获取包脚本程序集名称
解决方法
直接通过MonoScript对象获取程序集名称
包内脚本默认属于Unity预定义程序集(比如Assembly-CSharp),CompilationPipeline.GetAssemblyNameFromScriptPath()仅会返回自定义程序集或资源目录脚本的名称,直接传包内路径自然返回null。你可以先加载脚本对应的MonoScript对象,再从对象关联的类中提取程序集名称:// scriptPath 格式示例:"Packages/YourPackageName/Scripts/TestScript.cs" var monoScript = AssetDatabase.LoadAssetAtPath<MonoScript>(scriptPath); if (monoScript != null && monoScript.GetClass() != null) { string assemblyName = monoScript.GetClass().Assembly.GetName().Name; // 此处即为正确的程序集名称 }给包内脚本配置自定义程序集
如果坚持要用CompilationPipeline.GetAssemblyNameFromScriptPath(),可以在包内脚本目录下创建.asmdef文件,将包内脚本归类到自定义程序集中。这样函数就能识别到包内脚本属于自定义程序集,返回对应的名称。
为什么Monoscript Inspector能正常显示?
Inspector里的MonoScript是已加载的资源对象,它直接持有脚本类的引用,不需要通过路径判断程序集归属,因此能正常显示包内脚本的程序集名称,和你直接调用路径函数的逻辑完全不同。
内容的提问来源于stack exchange,提问作者Ayuro
相关产品推荐
相关产品推荐

