Open Yoraiz0r opened 1 month ago
This issue was also reported in the Rider bugtracker https://youtrack.jetbrains.com/issue/RIDER-111671/Riders-asset-refresh-on-code-change-does-not-trigger-Unitys-Multiplayer-Play-Modes-recompilation I haven't found a way for work-arounding it on the Rider package side. Please see details in the YouTrack issue.
Description
I've tried using Multiplayer Play Mode, with Domain Reload disabled, and noticed that when I make code changes, the domain is not reloaded for the additional players at certain times.
After some experimentation, I've determined the problem comes through its interaction with the Jetbrains Rider Editor.
The problem was perceived such that when changing any code with Rider (such as
Debug.Log("A")
toB
), the primary editor reloads domain properly, but other editors will not reload domain.Attempting the same process with Visual Studio code properly reloads domains for other editors.
To understand what is going wrong with the interaction, I've locally pulled both the
Jetbrains Rider Editor
package and theMultiplayer Play Mode
package.Jetbrains Rider seems to be innocent in this case, only asking for an assets refresh.
Multiplayer Play Mode fails under its lambda event for
vpContext.MainEditorSystems.AssetImportEvents.RequestImport
, inUnity.Multiplayer.Playmode.VirtualProjects.Editor.MainEditorInternalRuntime.HandleEvents
. Specifically, it fails under this this sectionIf the code is changed through visual studio, the
numAssetsChanged
is 1, but if Jetbrains Rider handles the code change, the event is only raised withnumAssetsChanged
being 0.This numAssetsCheck seems erronous to me, since
didDomainReload
is set totrue
.For now, I'm opting to locally solve this by changing this query to
if (numAssetsChanged == 0 && !didDomainReload)
, which resolves the problems.Reproduce Steps
Start() { Debug.Log("A"); }
and add it to a gameobject in an open scene.Project Settings/Editor/Enter Play Mode Settings
enableEnter Play Mode Options
and disableDomain Reload
."A"
to"B"
, and witness that only the primary player reloads domain.Actual Outcome
Primary player reloads domain, but second player does not.
Expected Outcome
Both players reload domain, when code changes.
Environment