Unity 出现error CS0103: The name ‘AssetDatabase‘ does not exist in the current context
Posted 旭God的舔狗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity 出现error CS0103: The name ‘AssetDatabase‘ does not exist in the current context相关的知识,希望对你有一定的参考价值。
问题描述
在Unity场景中,在进行build操作时出现这种报错,导致资源bundle无法正常生成,出现以下问题:
error CS0103: The name 'AssetDatabase' does not exist in the current context
error CS0234: The type or namespace name 'AssetDatabase' does not exist in the namespace 'UnityEditor' (are you missing an assembly reference?)
ps:上面两种错误都是同一种问题造成的,报错不一样的原因是由于UnityEditor在代码中的位置不同造成的:
前者是在开头声明了using UnityEditor,方法中使用AssetDatabase.LoadAssetAtPath;
后者是未声明using UnityEditor,而是在方法中直接使用了UnityEditor.AssetDatabase.LoadAssetAtPath
原因分析
在非Editor文件夹下的脚本中,存在着有关UnityEditor方法的使用
方法中第一行使用了UnityEditor中的AssetDatabase.LoadAssetAtPath方法,并且该方法所在的文件并非是在Editor文件夹下,导致build操作时出现报错
private void EditorLoadAsset(string assetName, Action<UnityEngine.Object> action)
UnityEngine.Object obj = UnityEditor.AssetDatabase.LoadAssetAtPath(assetName, typeof(UObject));
if (obj == null)
Debug.LogError("asset name is not exist: " + assetName);
action?.Invoke(obj);
解决方案
添加
#if UNITY_EDITOR
…
#endif
在方法外部,加上#if UNITY_EDITOR #endif,保证该方法只有在Unity编辑器中运行
#if UNITY_EDITOR
private void EditorLoadAsset(string assetName, Action<UnityEngine.Object> action)
UnityEngine.Object obj = UnityEditor.AssetDatabase.LoadAssetAtPath(assetName, typeof(UObject));
if (obj == null)
Debug.LogError("asset name is not exist: " + assetName);
action?.Invoke(obj);
#endif
注意
注:需要把调用该方法的地方也要用#if #endif包括起来
因为该方法时需要被调用的,然后测试的时候出现了以下问题
error CS0103: The name 'EditorLoadAsset' does not exist in the current context
出现问题的原因是调用此方法的地方未用#if #endif包含进去,在正式运行状态下,他会认为该方法不存在,找不到该方法导出出现报错。所以要将调用该方法的地方也要用#if #endif包括进来,让正式运行状态下也不用执行调用该方法的语句
Unity-报错解决error CS0619: ‘XRDevice.isPresent‘ is obsolete
Unity报错解决error CS0619: 'XRDevice.isPresent' is obsolete:
1.问题描述
Assets\\Battlehub\\RTCommon\\Scripts\\RTEBase.cs(690,20): error CS0619: ‘XRDevice.isPresent’ is obsolete: ‘This is obsolete, and should no longer be used. Instead, find the active XRDisplaySubsystem and check that the running property is true (for details, see XRDevice.isPresent documentation).’
这个报错是我在使用Unity的RuntimesEditor插件的时候出现的,大概就是说API过期了需要修改一下。
2.解决办法
在网上查了查没找到相关的,于是就根据报错提示直接去Unity的Api文档查看。看了一下才知道是之前的接口不能用了,重写一下就行。XRDevice.isPresent文档。按照文档中说的重写一个内部类再调用就行。
在代码中添加下面这部分,然后修改一下调用的代码就行。
internal static class ExampleUtil
public static bool isPresent()
var xrDisplaySubsystems = new List<XRDisplaySubsystem>();
SubsystemManager.GetInstances<XRDisplaySubsystem>(xrDisplaySubsystems);
foreach (var xrDisplay in xrDisplaySubsystems)
if (xrDisplay.running)
return true;
return false;
以上是关于Unity 出现error CS0103: The name ‘AssetDatabase‘ does not exist in the current context的主要内容,如果未能解决你的问题,请参考以下文章
ScriptableObject本地序列化后重启Unity后报The associated script can not be loaded.Please fix any compile errors
Unity-报错解决error CS0619: ‘XRDevice.isPresent‘ is obsolete
unity error CS0201: 只有赋值、调用、递增、递减、等待和新对象表达式可以作为语句使用
error CS0433: The type global_asax exists in both App_global.asax