找回密码
 立即注册
查看: 412|回复: 0

Unity中 .asmdef文件的作用

[复制链接]
发表于 2022-10-28 15:19 | 显示全部楼层 |阅读模式
项目中引用了一个插件源码,修改插件源码的时候遇到一个问题,就是一个脚本文件调用另外一个脚本文件的函数的时候一直提示缺失命名空间的引用,找不到此对象。但是明明已经把它的命名空间加上了,还是提示错误,后面才发现原来这两个脚本属于两个程序集定义,当前调用的脚本程序集没有包含另外一个,导致引用失败。


一、那到底是什么原因导致的呢?那是由于程序集的缘故。那什么又是程序集呢?
程序集是 C# 代码库,其中包含由脚本定义的已编译类和结构并且还定义了对其他程序集的引用。
默认情况下,Unity 几乎将所有游戏脚本都编译到预定义 程序集 Assembly-CSharp.dll 中。(Unity 还会创建[一些较小的专用预定义程序集]。)

这种安排对于小型项目而言可以接受,但是在向项目添加更多代码时会有一些缺点:
1、每次更改一个脚本时,Unity 都必须重新编译所有其他脚本,从而增加迭代代码更改的整体编译时间。
2、任何脚本都可以直接访问任何其他脚本中定义的类型,这样可能更加难以重构和改进代码。
3、所有脚本都针对所有平台进行编译。
通过定义程序集,可以组织代码以促进模块化和可重用性。为项目定义的程序集中的脚本不再添加到默认程序集中,并且只能访问指定的其他程序集中的脚本。


上图演示了如何将项目中的代码拆分为多个程序集。因为 Main 引用 Stuff 并且不进行反向引用,所以知道对 Main 中的代码进行的任何更改都不会影响 Stuff 中的代码。同样,因为 Library 不依赖于任何其他程序集,所以可以更轻松地在其他项目中重用 Library 中的代码。
二、上例子
这是我项目中报的错,如下图




原因是GameController.cs属于另一个程序集,使用了smartfox程序集中的代码,然后报了错,即使命名空间加上了,还是提示错误。
接下来我们修复一下,添加对smartfox程序集的引用,


然后重新编译,报错就消失了,非常简单。
如果我们项目比较大的话,就可以用这样的方法将程序模块化,减少编译时间,提升开发效率。你学会了吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-23 12:31 , Processed in 0.089725 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表