FlyVC
1
has anyone found a good method to assign WeakReferences inside the editor?
the unity manual example does not work: Weakly reference an object | Entities | 1.0.16
the inspector just shows “No GUI Implemented” and i already tried to do a custom implementation without luck.
Thanks!
FlyVC
2
turned out the example works, it was just the naughty attributes package that interfered
convenient but actually naughty 
Did you have any luck with weak entity reference?
FlyVC
4
far from optimal current solution
using Unity.Collections;
using Unity.Entities;
using Unity.Entities.Content;
using UnityEngine;
public partial class MaterialReferenceSystem : SystemBase
{
public NativeArray<WeakObjectReference<Material>> MaterialArray;
public Material[] LoadedMaterials;
private bool _finishedLoading = false;
public Entity MaterialReferenceEntity;
protected override void OnCreate()
{
MaterialReferenceEntity = EntityManager.CreateEntity();
EntityManager.SetName(MaterialReferenceEntity, "MaterialReferenceEntity");
EntityManager.AddSharedComponentManaged(MaterialReferenceEntity, new MaterialsSharedComponent
{
Materials = new Material[System.Enum.GetValues(typeof(TileMaterialType)).Length]
});
MaterialArray = new NativeArray<WeakObjectReference<Material>>(System.Enum.GetValues(typeof(TileMaterialType)).Length, Allocator.Persistent);
LoadedMaterials = new Material[System.Enum.GetValues(typeof(TileMaterialType)).Length];
var materialMappingData = Resources.Load<MaterialMapping>("ScriptableObjects/TileMaterialMappings");
if (materialMappingData != null)
{
for (int i = 0; i < materialMappingData.Materials.Length; i++)
{
MaterialArray[i] = materialMappingData.Materials[i];
MaterialArray[i].LoadAsync();
}
}
else
{
Debug.LogWarning("MaterialMappingData not found in Resources folder.");
}
}
protected override void OnDestroy()
{
MaterialArray.Dispose();
}
protected override void OnUpdate()
{
if(_finishedLoading)
{
return;
}
_finishedLoading = true;
for (int i = 0; i < MaterialArray.Length; i++)
{
if (MaterialArray[i].LoadingStatus == ObjectLoadingStatus.Completed)
{
LoadedMaterials[i] = MaterialArray[i].Result;
}
else
{
_finishedLoading = false;
}
}
if (_finishedLoading)
{
EntityManager.SetSharedComponentManaged(MaterialReferenceEntity, new MaterialsSharedComponent
{
Materials = LoadedMaterials
});
LoadedMaterials = null;
}
}
}
the ScriptiableObject materials are assigned “blind” in an array, tried a whole day to find a solution with an enum named array, but no luck.
Still hoping that someone finds a better solution 