Inception & WebGL build


Decided to use the Extra Credits Game Jam 2019 to learn Unity DOTS and Unity.Physics (their new physics library).  The Jam's theme "Connect" immediately suggested something Katamari Damarcy, World of Goo or similar to me but actual design is not set in stone yet.

I have all day Saturday and Sunday plus a few hours Friday morning and night to work on my entry so I'll allow a day or so for mostly learning and deciding what I might be able to make then a day on finishing that.  If I come out the end with an incomplete non-game but better appreciation of DOTS and Unity.Physics, I'll be more than satisfied.

I'd downloaded the latest Unity 2019.1.4 and the ECS Samples project so spent my couple of hours Friday skimming the samples, browsing the source, reading the documentation and found a CharacterController sample that's a neat base.  I figure I'll need it to run in the desktop and browser so tried builds.  Desktop worked fine.  WebGL build is really slow and, once done, failed to start with a memory error.  Turns out the sample project set webGL.memorySize to 256m but Unity now uses WebAssembly and it has a different memory parameter that's not exposed in the Editor?! 

WRONG: Editing the ProjectSettings.asset turned out not to be too hard:

<del>  webGLEmscriptenArgs: -s WASM_MEM_MAX=512MB</del>

UPDATE: OK so I've edited above to show which part was wrong.  Turns out one must create an Editor script with the memory parameter in.  Thanks to that link, here's what I used successfully...ish (see below):

#if UNITY_EDITOR
namespace UGS {
    [UnityEditor.InitializeOnLoad]
    public static class WasmMemConfig {
        static WasmMemConfig() {
            var maxHeapSize = 256*1024*1024;
            UnityEditor.PlayerSettings.WebGL.emscriptenArgs = string.Format("-s WASM_MEM_MAX={0} -s ALLOW_MEMORY_GROWTH=1", maxHeapSize);
        }
    }
}
#endif

Once done, however, it seems Unity.Physics doesn't actually work properly in WebGL build (at least with Firefox).  I don't think I have time to investigate this but I've recorded videos and ought to log this as a bug after the jam.  Here's it working in Editor and failing in Firefox:

EDIT 2: Rebuilt as a "development build" and check out the browser console only to find a rather obvious error spamming every frame:

NotImplementedException: The method or operation is not implemented.
  at Unity.Physics.JacobianHeader.Solve (Unity.Physics.MotionVelocity& velocityA, Unity.Physics.MotionVelocity& velocityB, Unity.Physics.Solver+StepInput stepInput, Unity.Collections.BlockStream+Writer& collisionEventsWriter, Unity.Collections.BlockStream+Writer& triggerEventsWriter) [0x00000] in <00000000000000000000000000000000>:0 
 
(Filename: currently not available on il2cpp Line: -1)
a99238ae-a0c7-4c1f-94d5-d2b4322ec7ec:3156:11
    _JS_Log_Dump blob:null/a99238ae-a0c7-4c1f-94d5-d2b4322ec7ec:3156
    __Z19WebGLPrintfConsolev7LogTypePKcPi blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:4258922
    __ZL20InternalErrorConsolePKcz blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:4124543
    __Z40DebugStringToFilePostprocessedStacktraceRK21DebugStringToFileData blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:1069669
    __Z17DebugStringToFileRK21DebugStringToFileData blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:1818814
    __ZN9Scripting23LogExceptionFromManagedE21ScriptingExceptionPtriPKcb blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:1874000
    __ZN19ScriptingInvocation6InvokeEP21ScriptingExceptionPtrb blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:2415143
    dynCall_iiii blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:4728342
    invoke_iiii blob:null/a99238ae-a0c7-4c1f-94d5-d2b4322ec7ec:16297
    __ZL10ExecuteJobP14ManagedJobDataPFvPvS1_S1_S1_iEi blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:871838
    __ZL26ForwardJobForEachToManagedP14ManagedJobDataj blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:4165688
    __ZN18JobBatchDispatcher26ScheduleJobForEachInternalER8JobFencePFvPvjES2_iPFvS2_ERKS0_ blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:4200233
    __Z29ScheduleManagedJobParallelForRK21JobScheduleParametersii blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:2265205
    __Z47JobsUtility_CUSTOM_ScheduleParallelFor_InjectedR21JobScheduleParametersiiR8JobFence blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:4110274
    _JobsUtility_ScheduleParallelFor_Injected_mF58FBA1C2413E2A71702DD1E9312B0307A427A71 blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:4262532
    _JobsUtility_ScheduleParallelFor_mD0B7FD9589FB242D9C4E21F93054C526FA6B1DBF blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:3981158
    _IJobParallelForExtensions_Schedule_TisSolverJob_t76F3B11DEEB43DA0E7ECDB328A3DD1275CC5BCEC_mEB662B9B0220CBFEA127EBF1D0D43F1FC12A2424_gshared blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:3067304
    __Z131IJobParallelForExtensions_Schedule_TisSolverJob_t76F3B11DEEB43DA0E7ECDB328A3DD1275CC5BCEC_mEB662B9B0220CBFEA127EBF1D0D43F1FC12A242451SolverJob_t76F3B11DEEB43DA0E7ECDB328A3DD1275CC5BCECii51JobHandle_tDA498A2E49AEDE014468F416A8A98A6B258D73D1PK10MethodInfo blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:3326083
    _Solver_ScheduleSolveJacobiansJobs_m0D12FEADCEFEB8190731369951E04678AF4DF91C blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:860049
    _Simulation_ScheduleStepJobs_mF19FD7B4D42823DF8F1950DFF08C90F865DB4EE9 blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:515925
    __ZN23InterfaceActionInvoker4I61SimulationStepInput_t1EB732E132B3FE934EB3D4E227208335DC1BC97E51JobHandle_tDA498A2E49AEDE014468F416A8A98A6B258D73D1PS1_S2_E6InvokeEjP11Il2CppClassP12Il2CppObjectS0_S1_S2_S2_ blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:2870050
    _StepPhysicsWorld_OnUpdate_mDDD9F79557170D95BE9297F559349DF489E21F9F blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:962865
    __ZN16VirtFuncInvoker1I51JobHandle_tDA498A2E49AEDE014468F416A8A98A6B258D73D1S0_E6InvokeEjP12Il2CppObjectS0_ blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:3776065
    dynCall_viiii blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:4687111
    invoke_viiii blob:null/a99238ae-a0c7-4c1f-94d5-d2b4322ec7ec:17567
    _JobComponentSystem_InternalUpdate_m86BEFD7ACF8C3B6D62ECEAB854F1F8B19791BC71 blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:1805319
    __ZN18VirtActionInvoker06InvokeEjP12Il2CppObject blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:4560482
    _ComponentSystemBase_Update_m006B42B5406DCB2EC12E23F9C242D842CFA0BB5B blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:4684786
    dynCall_vii blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:4831989
    invoke_vii blob:null/a99238ae-a0c7-4c1f-94d5-d2b4322ec7ec:17247
    _ComponentSystemGroup_OnUpdate_m26B237E703EF64AAAA6D539D14A80DA7B8BF2254 blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:1763841
    __ZN18VirtActionInvoker06InvokeEjP12Il2CppObject blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:4560482
    dynCall_vii blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:4831989
    invoke_vii blob:null/a99238ae-a0c7-4c1f-94d5-d2b4322ec7ec:17247
    _ComponentSystem_InternalUpdate_mB54CF99988286D23BAADD821C47494AA69C1E850 blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:2729270
    __ZN18VirtActionInvoker06InvokeEjP12Il2CppObject blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:4560482
    _ComponentSystemBase_Update_m006B42B5406DCB2EC12E23F9C242D842CFA0BB5B blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:4684786
    _DummyDelegateWrapper_TriggerUpdate_mCD23D9DDE01C50C4AE3F1E73F1EFC7CB3F0E9C63 blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:4417426
    _UpdateFunction_Invoke_m947E91D565C20FCCD7681BBD18998152C70EF0A6 blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:2385748
    __Z65RuntimeInvoker_TrueVoid_t22962CB4C05B1D89B55A6E1139F0E87A90987017PFvvEPK10MethodInfoPvPS4_ blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:4601930
    dynCall_iiiii blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:4672923
    invoke_iiiii blob:null/a99238ae-a0c7-4c1f-94d5-d2b4322ec7ec:16387
    __ZN6il2cpp2vm7Runtime6InvokeEPK10MethodInfoPvPS5_PP15Il2CppException blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:3220513
    _il2cpp_runtime_invoke blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:4508847
    __Z23scripting_method_invoke18ScriptingMethodPtr18ScriptingObjectPtrR18ScriptingArgumentsP21ScriptingExceptionPtrb blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:4027864
    __ZN19ScriptingInvocation6InvokeEP21ScriptingExceptionPtrb blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:2415120
    __Z17ExecutePlayerLoopP22NativePlayerLoopSystem blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:2428800
    __Z17ExecutePlayerLoopP22NativePlayerLoopSystem blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:2428779
    __Z10PlayerLoopv blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:1973077
    __ZL8MainLoopv blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:1883122
    dynCall_v blob:null/8c4a7066-faa5-4d74-a8f3-c902c880f8c5:4851599
    browserIterationFunc blob:null/a99238ae-a0c7-4c1f-94d5-d2b4322ec7ec:8906
    runIter blob:null/a99238ae-a0c7-4c1f-94d5-d2b4322ec7ec:9008
    Browser_mainLoop_runner blob:null/a99238ae-a0c7-4c1f-94d5-d2b4322ec7ec:8944

I'd hazard that some level of stripping has removed some rather vital functionality.  With time we could figure out how to force retention of the Unity.Physics code and hopefully it'd fix the problem.  Maybe when I have more time :)

For now, I've already burnt 4 hours on this.  Guess my entry will be download-only!

Onwards, to the Learning!

NEXT ->

Leave a comment

Log in with itch.io to leave a comment.