西姆极客 码农 unity常见问题

unity常见问题

常见问题

Unity3d can’t add the script component XXX because the script class cannot be found.

问题已关闭

写好一个Script,将它加入某个GameObject 发生报错:Unity3d can’t add the script component XXX because the script class cannot be found.

原因:这是因为Script的文件名与脚本中类型的名称不一样的警告。
解决方法:Script的文件名与类型保持一致(例如 文件名:AAA.cs ,类名:public class AAA: MonoBehaviour)

编译、打包、发布

ArgumentException: The Assembly System.Management is referenced by StriveEngine. But the dll is not allowed to be included or could not be found.

问题已关闭

此部分内容来自zhuweisky 博客中记录的:

我们在当前的一个U3D项目中使用了StriveEngine作为通信组件与服务端进行通信,在U3D环境中,编译运行一切正常,但在打包发布(Build)为PC版本可执行文件时,却出现错误:“ArgumentException: The Assembly System.Management is referenced by StriveEngine. But the dll is not allowed to be included or could not be found.”

最初,我以为是签名或者是加密混淆的问题,于是我使用原始编译生成的StriveEngine.dll,问题一样存在。

接着,我再猜测可能是StriveEngine.dll编译时选择平台的问题,于是把目标平台由anycpu更改为x86,重新生成StriveEngine.dll,并且在u3d打包发布也选择x86,如下图所示:

但是,问题依然存在。

经过一番折腾,终于发现需要设置一下U3D所使用的.NET版本 — 点击Player Settings按钮,找到Api Compatibility Level选项,选择”.Net 2.0″,而非”.Net 2.0 Subset”,如下图所示:

这个选项的意思是说,要使用.NET 2.0的完整版本,而非其子集。经过此设置,终于可以打包发布成功。

究其原因,看来是因为StriveEngine所使用的是完整版本.NET 2.0。

Find can only be called from the main thread.

问题已关闭

Find can only be called from the main thread.

Constructors and field initializers will be executed from the loading thread when loading a scene.
Don’t use this function in the constructor or field initializers, instead move initialization code to the Awake or Start function.

在主线程中开启一个新线程,并在新线程中调用Mono库的方法会得到此异常提示,Unity社区中有相关的问答 (传送门),以及在stack over flow社区中也有相关的问答 (传送门)。

System.NullReferenceException

问题已关闭

“System.NullReferenceException: Object reference not set to an instance of an object\r\n  at xxxxxx.Form1..ctor () [xxxx…]

这个实际上是C# 常规报错,对象的引用是无效的。排查产生该无效对象的函数即可,值得记录的是 .ctor() 函数就是C#中类对象构造函数。

System.TypeInitializationException

问题已关闭

“System.TypeInitializationException: The type initializer for ‘XXXXX’ threw an exception. —> System.Reflection.AmbiguousMatchException: Ambiguous match found.\r\n  at System.RuntimeType.GetMethodImpl (

这是有因为在XX库中使用typeof(XXX).GetMethod(“Select”,… 方法导致的,Mono中ContainerControl已经没有Select方法了,如果使用3rd库将会导致类的初始化失败。

System.Windows.Forms.NativeWindow.WndProc Exception

问题未关闭

该问题是我在使用了第三方的控件库,在Draw窗体的时候发生的异常,堆栈的调用过程如下图:

我已经在Unity社区论坛发布了问题(传送门),如果有了解的大牛也请分享一下解决的思路。

ACL is not supported in Mono 异常

问题已关闭

这是因为在某些方法中使用了 TokenImpersonationLevel.Impersonation,修改为TokenImpersonationLevel.None就可以了。

欢迎扫码转发

标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

2 − 1 =

Scroll Up