Hello everyone & Happy Holidays (aka time to work on our games… ),
I have a small IConvertGameObjectToEntity
class doing the following:
public class PrefabRegistryEntryAuthoring : MonoBehaviour, IConvertGameObjectToEntity {
public PrefabRegistryIdentifier PrefabRegistryIdentifier;
public void Convert(Entity entity, EntityManager entityManager, GameObjectConversionSystem gameObjectConversionSystem) {
if (TryGetComponent<TrailRenderer>(out var trailRenderer)) {
gameObjectConversionSystem.AddHybridComponent(trailRenderer);
}
if (TryGetComponent<ParticleSystem>(out var particleSystem)) {
gameObjectConversionSystem.AddHybridComponent(particleSystem);
if (TryGetComponent<ParticleSystemRenderer>(out var particleSystemRenderer)) {
gameObjectConversionSystem.AddHybridComponent(particleSystemRenderer);
}
}
}
}
While Android builds run perfectly fine, on iOS it results in the following runtime crash(es):
ArgumentOutOfRangeException: Value has to be >= 0. Parameter name: length
System.Array.Copy (System.Array sourceArray, System.Int32 sourceIndex, System.Array destinationArray, System.Int32 destinationIndex, System.Int32 length) (at <00000000000000000000000000000000>:0)
System.Array.Resize[T] (T[]& array, System.Int32 newSize) (at <00000000000000000000000000000000>:0)
Unity.Entities.Conversion.MultiList`2[T,I].Resize (Unity.Collections.NativeArray`1[System.Int32]& data, System.Int32 size) (at <00000000000000000000000000000000>:0)
Unity.Entities.Conversion.MultiList`2[T,I].Resize (Unity.Collections.NativeArray`1[System.Int32]& data, System.Int32 size) (at <00000000000000000000000000000000>:0)
Unity.Entities.Conversion.MultiList`2[T,I].Resize (Unity.Collections.NativeArray`1[System.Int32]& data, System.Int32 size) (at <00000000000000000000000000000000>:0)
Unity.Entities.Conversion.MultiList.CalcExpandCapacity (System.Int32 current, System.Int32& needed) (at <00000000000000000000000000000000>:0)
Game.Systems.Conversion.PrefabRegistryEntryAuthoring.Convert (Unity.Entities.Entity entity, Unity.Entities.EntityManager entityManager, GameObjectConversionSystem gameObjectConversionSystem) (at <00000000000000000000000000000000>:0)
Unity.Entities.Conversion.ConvertGameObjectToEntitySystem.Convert (UnityEngine.Transform transform, System.Collections.Generic.List`1[T] convertibles) (at <00000000000000000000000000000000>:0)
Unity.Entities.EntityQueryBuilder+F_C`1[T0].Invoke (T0 c0) (at <00000000000000000000000000000000>:0)
Unity.Entities.EntityManagerManagedComponentExtensions.SetComponentData[T] (Unity.Entities.EntityManager manager, Unity.Entities.Entity entity, T componentData) (at <00000000000000000000000000000000>:0)
Unity.Entities.Conversion.ConvertGameObjectToEntitySystem.OnUpdate () (at <00000000000000000000000000000000>:0)
Unity.Entities.ComponentSystem.Update () (at <00000000000000000000000000000000>:0)
Unity.Entities.ComponentSystemGroup.UpdateAllSystems () (at <00000000000000000000000000000000>:0)
Unity.Entities.ComponentSystem.Update () (at <00000000000000000000000000000000>:0)
Unity.Entities.GameObjectConversionUtility.Convert (Unity.Entities.World conversionWorld) (at <00000000000000000000000000000000>:0)
Unity.Entities.ConvertToEntitySystem.Convert () (at <00000000000000000000000000000000>:0)
Unity.Entities.ComponentSystem.Update () (at <00000000000000000000000000000000>:0)
Unity.Entities.ComponentSystemGroup.UpdateAllSystems () (at <00000000000000000000000000000000>:0)
Unity.Entities.ComponentSystem.Update () (at <00000000000000000000000000000000>:0)
UnityEngine.LowLevel.PlayerLoopSystem+UpdateFunction.Invoke () (at <00000000000000000000000000000000>:0)
Unity.Entities.Conversion.ConvertGameObjectToEntitySystem:Convert(Transform, List`1)
Unity.Entities.F_C`1:Invoke(T0)
Unity.Entities.EntityManagerManagedComponentExtensions:SetComponentData(EntityManager, Entity, T)
Unity.Entities.Conversion.ConvertGameObjectToEntitySystem:OnUpdate()
Unity.Entities.ComponentSystem:Update()
Unity.Entities.ComponentSystemGroup:UpdateAllSystems()
Unity.Entities.ComponentSystem:Update()
Unity.Entities.GameObjectConversionUtility:Convert(World)
Unity.Entities.ConvertToEntitySystem:Convert()
Unity.Entities.ComponentSystem:Update()
Unity.Entities.ComponentSystemGroup:UpdateAllSystems()
Unity.Entities.ComponentSystem:Update()
UnityEngine.LowLevel.UpdateFunction:Invoke()
Here’s another one: (Btw, mysteriously Facebook.Unity.MethodCall
shows up at the top of this stack trace, but that’s possibly just due to various crash loggers hooking all over the place )
IndexOutOfRangeException: Index was outside the bounds of the array.
Facebook.Unity.MethodCall`1[T].set_Parameters (Facebook.Unity.MethodArguments value) (at <00000000000000000000000000000000>:0)
Unity.Entities.Conversion.MultiList`2[T,I].Resize (Unity.Collections.NativeArray`1[System.Int32]& data, System.Int32 size) (at <00000000000000000000000000000000>:0)
Unity.Entities.Conversion.MultiList.CalcExpandCapacity (System.Int32 current, System.Int32& needed) (at <00000000000000000000000000000000>:0)
Unity.Entities.Conversion.MultiList.CalcExpandCapacity (System.Int32 current, System.Int32& needed) (at <00000000000000000000000000000000>:0)
Unity.Entities.Conversion.JournalingUnityLogger.LogException (System.Exception exception, UnityEngine.Object context) (at <00000000000000000000000000000000>:0)
Unity.Entities.ComponentSystemGroup.UpdateAllSystems () (at <00000000000000000000000000000000>:0)
Unity.Entities.ComponentSystem.Update () (at <00000000000000000000000000000000>:0)
Unity.Entities.GameObjectConversionUtility.Convert (Unity.Entities.World conversionWorld) (at <00000000000000000000000000000000>:0)
Unity.Entities.ConvertToEntitySystem.Convert () (at <00000000000000000000000000000000>:0)
Unity.Entities.ComponentSystem.Update () (at <00000000000000000000000000000000>:0)
Unity.Entities.ComponentSystemGroup.UpdateAllSystems () (at <00000000000000000000000000000000>:0)
Unity.Entities.ComponentSystem.Update () (at <00000000000000000000000000000000>:0)
UnityEngine.LowLevel.PlayerLoopSystem+UpdateFunction.Invoke () (at <00000000000000000000000000000000>:0)
Unity.Entities.ComponentSystemGroup:UpdateAllSystems()
Unity.Entities.ComponentSystem:Update()
UnityEngine.LowLevel.UpdateFunction:Invoke()
I have not yet worked on a MVP to reproduce this bug outside of my game, but I’m wondering if this is a known issue.
My package.json is as follows:
{
"dependencies": {
"com.e7.notch-solution": "git://github.com/5argon/NotchSolution.git",
"com.google.external-dependency-manager": "1.2.163",
"com.google.firebase.analytics": "7.0.2",
"com.google.firebase.auth": "7.0.2",
"com.google.firebase.crashlytics": "7.0.2",
"com.google.firebase.installations": "7.0.2",
"com.google.firebase.messaging": "7.0.2",
"com.google.firebase.remote-config": "7.0.2",
"com.unity.2d.sprite": "1.0.0",
"com.unity.addressables": "1.16.15",
"com.unity.analytics": "3.5.3",
"com.unity.animation": "0.8.0-preview.4",
"com.unity.device-simulator": "2.2.3-preview",
"com.unity.dots.editor": "0.11.0-preview.3",
"com.unity.entities": "0.16.0-preview.21",
"com.unity.ide.rider": "3.0.3",
"com.unity.inputsystem": "1.0.1",
"com.unity.localization": "0.9.0-preview",
"com.unity.mobile.notifications": "1.3.2",
"com.unity.nuget.newtonsoft-json": "2.0.0",
"com.unity.performance.profile-analyzer": "1.0.3",
"com.unity.platforms.android": "0.9.0-preview.9",
"com.unity.platforms.ios": "0.9.0-preview.9",
"com.unity.platforms.macos": "0.9.0-preview.9",
"com.unity.polybrush": "1.0.2",
"com.unity.physics": "0.5.1-preview.2",
"com.unity.probuilder": "4.4.0",
"com.unity.progrids": "3.0.3-preview.6",
"com.unity.properties": "1.3.0-preview",
"com.unity.properties.ui": "1.6.0-preview",
"com.unity.purchasing": "2.2.1",
"com.unity.purchasing.udp": "2.1.4",
"com.unity.quicksearch": "2.0.2",
"com.unity.render-pipelines.universal": "9.0.0-preview.72",
"com.unity.rendering.hybrid": "0.10.0-preview.21",
"com.unity.serialization": "1.6.1-preview",
"com.unity.test-framework": "1.1.19",
"com.unity.test-framework.performance": "2.2.0-preview",
"com.unity.timeline": "1.3.6",
"com.unity.ugui": "1.0.0",
"com.unity.uiextensions": "2.2.2",
"com.unity.modules.ai": "1.0.0",
"com.unity.modules.androidjni": "1.0.0",
"com.unity.modules.animation": "1.0.0",
"com.unity.modules.assetbundle": "1.0.0",
"com.unity.modules.audio": "1.0.0",
"com.unity.modules.cloth": "1.0.0",
"com.unity.modules.director": "1.0.0",
"com.unity.modules.imageconversion": "1.0.0",
"com.unity.modules.imgui": "1.0.0",
"com.unity.modules.jsonserialize": "1.0.0",
"com.unity.modules.particlesystem": "1.0.0",
"com.unity.modules.physics": "1.0.0",
"com.unity.modules.physics2d": "1.0.0",
"com.unity.modules.screencapture": "1.0.0",
"com.unity.modules.terrain": "1.0.0",
"com.unity.modules.terrainphysics": "1.0.0",
"com.unity.modules.tilemap": "1.0.0",
"com.unity.modules.ui": "1.0.0",
"com.unity.modules.uielements": "1.0.0",
"com.unity.modules.umbra": "1.0.0",
"com.unity.modules.unityanalytics": "1.0.0",
"com.unity.modules.unitywebrequest": "1.0.0",
"com.unity.modules.unitywebrequestassetbundle": "1.0.0",
"com.unity.modules.unitywebrequestaudio": "1.0.0",
"com.unity.modules.unitywebrequesttexture": "1.0.0",
"com.unity.modules.unitywebrequestwww": "1.0.0",
"com.unity.modules.vehicles": "1.0.0",
"com.unity.modules.video": "1.0.0",
"com.unity.modules.vr": "1.0.0",
"com.unity.modules.wind": "1.0.0",
"com.unity.modules.xr": "1.0.0"
},
"scopedRegistries": [
{
"name": "Game Package Registry by Google",
"url": "https://unityregistry-pa.googleapis.com",
"scopes": [
"com.google"
]
},
{
"name": "npmjs",
"url": "https://registry.npmjs.org/",
"scopes": [
"com.unity.uiextensions"
]
}
]
}
I’m using Unity 2020.1.17f1
, Xcode 12.2 (12B45b)
, iPhone11,8
, iOS 14.0
, arm64e
,
if that matters.
The exact same IConvertGameObjectToEntity
has worked on older entities package 0.11.2-preview.1
just fine on iOS. And as I mentioned it works just fine on Android and iOS.
Does anyone have an idea what’s going wrong here?
Thanks,
Nicolas