What is assembly definition
We know that unity automatically defines how scripts are compiled into managed assemblies. After all scripts are compiled, a managed assembly is generated. Naturally, as we add more and more scripts, the compilation time will be longer and longer. If the project becomes large enough, the waiting compilation time is quite terrible
In this way, the assembly definition file (assembly definition file) arises at the historic moment, which can be used to reduce the compilation time
principle basis:
The script is saved in different folders. An assembly definition file is generated from a folder containing multiple scripts. When one of the scripts is modified, only the assembly definition file containing the script will be recompiled, and the others will not be recompiled, so as to reduce the compilation time
As shown in the figure:
How to use assembly definition
Use the following menu to create an assembly definition file:
The created file is also regarded as a resource file. The suffix of the file ends with. Asmdef
How to set assembly definition
Create an assembly definition file in a folder. All scripts in the folder will be compiled into the assembly definition file. After selecting the assembly definition file
The inspector property panel is shown as follows:
First name: set the assembly name( The name of the folder where the assembly definition file is located, the name of the assembly definition file itself, and the assembly name set in the property panel do not affect each other.)
Second references: click the plus sign to add other assembly definition files referenced by the assembly definition file( Use references to compile assemblies in unity and define their direct dependencies)
Third, unity References: check this option if the assembly is used for testing( The assembly will not be added to the predefined assembly file, such as assembly-csharp.dll, nor will it be added to the packaging file.)
Fourth option: check this option if the unsafe keyword is used in the script in the assembly file
Fifth, platforms: set the platform compatibility of the assembly definition file( Some special platforms can be excluded or included)
assembly definition hierarchy
In the multi-level folder structure, the Script Compilation belongs to the corresponding assembly definition file according to the shortest path
For example:
There are three paths:
Asset/Scripts/Main.asmdef
Asset/Scripts/Example1/Example1.asmdef
Asset/Scripts/Example1/Example2/Example2.asmdef
In this way, all scripts in the folder example2 will be compiled into the assembly definition file example2
All scripts in the folder example1 are compiled into the assembly definition file example1
All other scripts in the scripts folder but not in example1 and example2 will be compiled into the assembly definition file main
assembly definition file is not an assembly generation file
The assembly definition file is not an assembly generation file. It does not support the rules of conditional generation in the generation system. This is also the reason why the assembly definition file does not support setting preprocessing instructions, because these preprocessing instructions are always static
backward compatible implicit dependency
The assembly definition file is backward compatible with the definition compilation system in unity. This means that predefined assemblies always depend on the assembly of each assembly definition file. This is similar to how all scripts in unity depend on all the precompiled assemblies (plugins /. DLLs) that are compatible with the target
The following figure illustrates the dependencies between predefined assemblies and assembly definition files assemblies and precompiled assemblies:
The priority of the assembly definition file set in unity is higher than that of the predefined compilation system. This means that if there are some pre-defined special folders in the assembly definition file (such as resources, editor, plugins, etc.) in the compilation system, they will only exist as ordinary folders and will not have any special meaning
strongly recommend:
Either use the assembly definition file for all scripts in the project, or none at all. Otherwise, scripts that do not use the assembly definition file will still be recompiled after modification, which is a waste of time. This makes the script that uses the assembly definition file meaningless
If we open the assembly definition file, we will find that it is actually a JSON file
It contains name, references, include platforms and exclude platforms fields
All of them are optional except name
Well, that’s all for the assembly definition file. After we understand it, we must try to use it in the project, so that we can better grasp and play its role
To be continued
Come on~
welcome scan code to pay attention to official account, get continuous update
Dear guests, if you think it’s useful, please like it and share it~
this article is shared by WeChat official account – game developer development and sharing (No_ 2SeeYou)。