/// <summary> /// 必要であれば、DrawInstanceEntity にLODコンポーネントデータを追加する。 /// ・LODが登録されていない場合は、コンポーネントデータを追加しない。 /// ・LOD枠が確保されていて、LODにオブジェクトが登録されている場合は、 /// そのオブジェクト以下の結合メッシュを採用する。 /// ・LOD枠が確保されていて、LOD登録が Nothing の場合は、 /// オブジェクトトップから見つかった最初のメッシュを無加工で採用する。 /// </summary> static public void AddLod2ComponentToDrawInstanceEntity ( this GameObjectConversionSystem gcs_, Entity drawInstance_, GameObject main_, ObjectAndDistance[] lods_ ) { if (lods_.Length != 2) { return; } var lod0_ = lods_[0].objectTop ?? main_; var lod1_ = lods_[1].objectTop ?? main_; var em = gcs_.DstEntityManager; em.AddComponentData(drawInstance_, new DrawInstance.ModelLod2LinkData { DrawModelEntity0 = gcs_.GetFromModelEntityDictionary(lod0_), DrawModelEntity1 = gcs_.GetFromModelEntityDictionary(lod1_), SqrDistance0 = lods_[0].distance * lods_[0].distance, SqrDistance1 = lods_[1].distance * lods_[1].distance, } ); }
/// <summary> /// DrawInstanceEntity のリンクに設定すべき DrawModelEntity を返す。 /// LOD使用時は毎フレーム更新される値なので、初期値は適当でもよい。 /// </summary> static public Entity GetDrawModelEntity ( this GameObjectConversionSystem gcs_, GameObject main_, ObjectAndDistance[] lods_ ) { var model = gcs_.GetFromModelEntityDictionary(main_); if (model != Entity.Null) { return(model); } return(lods_ .Select(x => x.objectTop) .Where(x => x != null) .Select(x => gcs_.GetFromModelEntityDictionary(x)) .First()); }
// ---------------------------------------------------------------------------------- static Entity createDrawInstanceEntity (GameObjectConversionSystem gcs, GameObject top, GameObject main) { var em = gcs.DstEntityManager; var archetype = em.CreateArchetype ( typeof(DrawInstance.MeshTag), typeof(DrawInstance.ModeLinkData), typeof(DrawInstance.PostureLinkData), typeof(DrawInstance.TargetWorkData) ); var ent = gcs.CreateAdditionalEntity(top, archetype); em.SetComponentData(ent, new DrawInstance.ModeLinkData { DrawModelEntityCurrent = gcs.GetFromModelEntityDictionary(top), } ); em.SetComponentData(ent, new DrawInstance.PostureLinkData { PostureEntity = gcs.GetPrimaryEntity(main), } ); em.SetComponentData(ent, new DrawInstance.TargetWorkData { DrawInstanceId = -1, } ); em.SetName_(ent, $"{top.name} draw"); return(ent); }