Search Issue Tracker
Third Party Issue
Votes
15
Found in
2020.2.0b3
2020.3
2020.3.13f1
2021.1
Issue ID
1350116
Regression
Yes
Unity does not execute code weavers when the project is opened for the first time
How to reproduce:
1. Download user attached project "unity2020-weaver-bug.zip"
2. Inside the project folder, delete the "Library" folder
3. Open the project
4. Enter Scene "SampleScene"
5. In the Hierarchy window, click on a Game Object "GameObject"
6. In the Inspector window, observe the "Tester" Component
Expected result: Both "Basic" and "TestNum" fields are shown
Actual result: Only the "Basic" field is shown
Reproducible with: 2020.2.0b3 2020.3.13f1, 2020.3.15f2, 2021.1.16f1
Not reproducible with: 2019.4.29f1, 2020.2.0b2
Can't test: 2021.2.0b6, 2022.1.0a5 (Console error: "An infinite import loop has been detected. The following Assets were imported multiple times, but no changes to them have been detected. Please check if any custom code is trying to import them")
Note:
-By invoking ReloadAssemblies (by reopening a project, modifying a script) the "TestNum" field appears
-If we do a build of the project, the built application will crash upon launching
-If we do a build after reopening the project, the built will not crash
Add comment
All about bugs
View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.
Latest issues
- Rendering locks up when not looking at a transparent material on Meta Quest 2
- Volumetrics break when using a Custom Pass to create a Thickness Buffer for Alpha Clipping
- All tests are run instead of only the failed ones when the "Rerun Failed" button is pressed
- GameObject is not masked when the "Render PostProcessing Effects" pass executes with a resolved non-MSAA Color target and MSAA DepthStencil target
- [Android] Gfx.WaitForGfxCommandsFromMainThread high performance usage and inconsistency when built Player scene has Canvas GameObject on a specific Project
Resolution Note (2022.1.X):
The issue has been confirmed to come from https://github.com/ExtendRealityLtd/Malimbe/blob/98b63aac53fbf1358643b7f5137d677ada95bcd4/Sources/FodyRunner.UnityIntegration/EditorWeaver.cs#L53:
Explanation here:
- When loading a project containing user code, we have 2 domain reloads: the inital one that loads unity own assembly, compile the code and trigger the second reload that contains compiled scripts
- Before 2020.3 we used to load pre-compiled assemblies during the first domain reload: thus the second domain reload happened after foddy integration initialization, picking up the changes it injected.
- Starting with 2020.3, the ordering did change a little bit, to prevent issues where pre-compiled assemblies can depend on script code to execute correctly
- AssetDatabase does not track assemblies from script compilation, only the source files, but the changes produced by foddy only modify the compiled assemblies.
- Now that the initialization occur on the 2nd reload, there is no other change, or other system triggering a domain reload picking up the changes brought by Foddy: the assemblies are weaved, but not reloaded.
To fix that, instead of triggering an ADB refresh, Foddy integration package should trigger a domain reload using https://docs.unity3d.com/ScriptReference/EditorUtility.RequestScriptReload.html.
We opened a PR to help fixing the issue here: https://github.com/ExtendRealityLtd/Malimbe/pull/69