コード例 #1
0
        /// <summary>
        /// 描画関係はバインダーに、ボーン関係はメインに関連付ける
        /// </summary>
        public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem)
        {
            var skinnedMeshRenderers = this.GetComponentsInChildren <SkinnedMeshRenderer>();
            var qMesh = skinnedMeshRenderers.Select(x => x.sharedMesh);
            var bones = skinnedMeshRenderers.First().bones.Where(x => !x.name.StartsWith("_")).ToArray();

            var top  = this.gameObject;
            var main = top.Children().First();

            createModelEntity_(conversionSystem, top, this.MaterialToDraw, qMesh, bones);

            initBinderEntity_(conversionSystem, top, main);
            initMainEntity_(conversionSystem, top, main);

            conversionSystem.CreateBoneEntities(main, bones);

            conversionSystem.CreateDrawInstanceEntities(top, main, bones, BoneType.TR, 0);

            return;


            void createModelEntity_
            (
                GameObjectConversionSystem gcs_, GameObject top_,
                Material srcMaterial, IEnumerable <Mesh> srcMeshes, Transform[] bones_
            )
            {
                var mat  = new Material(srcMaterial);
                var mesh = DrawModelEntityConvertUtility.CombineAndConvertMesh(srcMeshes, bones_);

                const BoneType BoneType = BoneType.TR;

                gcs_.CreateDrawModelEntityComponents(top_, mesh, mat, BoneType, bones_.Length);
            }

            void initBinderEntity_(GameObjectConversionSystem gcs_, GameObject top_, GameObject main_)
            {
                var em_ = gcs_.DstEntityManager;

                var binderEntity = gcs_.GetPrimaryEntity(top_);
                var mainEntity   = gcs_.GetPrimaryEntity(main_);


                var binderAddtypes = new ComponentTypes
                                     (
                    typeof(BinderTrimBlankLinkedEntityGroupTag),
                    typeof(ObjectBinder.MainEntityLinkData)
                                     );

                em_.AddComponents(binderEntity, binderAddtypes);

                em_.SetComponentData(binderEntity,
                                     new ObjectBinder.MainEntityLinkData {
                    MainEntity = mainEntity
                });


                em_.SetName_(binderEntity, $"{top_.name} binder");
            }

            void initMainEntity_(GameObjectConversionSystem gcs_, GameObject top_, GameObject main_)
            {
                var em_ = gcs_.DstEntityManager;

                var binderEntity = gcs_.GetPrimaryEntity(top_);
                var mainEntity   = gcs_.GetPrimaryEntity(main_);


                var mainAddtypes = new ComponentTypes
                                   (
                    typeof(ObjectMain.ObjectMainTag),
                    typeof(ObjectMain.BinderLinkData),
                    typeof(ObjectMainCharacterLinkData)
                    //typeof(ObjectMain.MotionLinkDate)
                                   );

                em_.AddComponents(mainEntity, mainAddtypes);

                em_.SetComponentData(mainEntity,
                                     new ObjectMain.BinderLinkData
                {
                    BinderEntity = binderEntity,
                }
                                     );
                em_.SetComponentData(mainEntity,
                                     new ObjectMainCharacterLinkData
                {
                    PostureEntity = mainEntity,    //
                }
                                     );


                em_.SetName_(mainEntity, $"{top_.name} main");
            }
        }