public void OnEntityCreated(Context f, Lockstep.UnsafeECS.Entity *pEntity)
        {
            if (pEntity == null)
            {
                Debug.LogError("OnEntityCreated null");
                return;
            }

            var pPrefab = EntityUtil.GetPrefab(pEntity);

            if (pPrefab == null)
            {
                return;
            }

            var assetId = pPrefab->AssetId;

            if (assetId == 0)
            {
                return;
            }
            Debug.Assert(_assetId2EntityPrefas.ContainsKey(assetId), "assetId" + assetId);
            var uEntity = _entityManager.Instantiate(_assetId2EntityPrefas[assetId]);

            _entityManager.AddComponentData(uEntity, pEntity->_ref);
            _id2UnityEntity[pEntity->LocalId] = uEntity;
            Transform3D *transform3D = EntityUtil.GetTransform3D(pEntity);

            if (transform3D != null)
            {
                _entityManager.SetComponentData(uEntity, new Unity.Transforms.LocalToWorld {
                    Value = float4x4.TRS(
                        transform3D->Position.ToVector3(),
                        quaternion.LookRotationSafe(transform3D->Forward.ToVector3(), Unity.Mathematics.math.up()),
                        new float3(1))
                });
            }

            if (!EntityViewUtil.HasView(pEntity))
            {
                return;
            }

            //bind view
            Debug.Assert(!_id2EntityView.ContainsKey(pEntity->_localId));
            var view = EntityViewUtil.BindEntityView(pEntity);

            view.BindEntity(pEntity);
            view.OnBindEntity();
            _id2EntityView[pEntity->_localId] = view;
        }
 public void OnEntityDestroy(Context f, Lockstep.UnsafeECS.Entity *pEntity)
 {
     if (_id2EntityView.TryGetValue(pEntity->LocalId, out var uView))
     {
         // ReSharper disable once Unity.NoNullPropogation
         uView?.OnUnbindEntity();
         uView?.UnbindEntity();
         _id2EntityView.Remove(pEntity->LocalId);
     }
     if (_id2UnityEntity.TryGetValue(pEntity->LocalId, out var uEntity))
     {
         _entityManager.DestroyEntity(uEntity);
         _id2UnityEntity.Remove(pEntity->LocalId);
     }
 }