Ejemplo n.º 1
0
        // メッシュを結合する
        static public Mesh CombineAndConvertMesh(IEnumerable <Mesh> meshes, Transform[] bones)
        {
            var qCis =
                from mesh in meshes
                select new CombineInstance
            {
                mesh = mesh
            };

            //return ChMeshConverter.ConvertToChMesh( smrs_.ElementAt( 0 ).sharedMesh, smrs_.ElementAt(0).bones );

            var dstmesh    = new Mesh();
            var boneLength = meshes.First().bindposes.Length;

            // 後でちゃんとした結合に差し替えよう
            dstmesh.CombineMeshes(qCis.ToArray(), mergeSubMeshes: true, useMatrices: false);
            dstmesh.boneWeights = (
                from w in dstmesh.boneWeights
                select new BoneWeight
            {
                boneIndex0 = w.boneIndex0 % boneLength,
                boneIndex1 = w.boneIndex1 % boneLength,
                boneIndex2 = w.boneIndex2 % boneLength,
                boneIndex3 = w.boneIndex3 % boneLength,
                weight0 = w.weight0,
                weight1 = w.weight1,
                weight2 = w.weight2,
                weight3 = w.weight3,
            }
                )
                                  .ToArray();

            return(ChMeshConverter.ConvertToChMesh(dstmesh, bones));
        }
        public Entity Convert(EntityManager em, Func <Mesh, Material, BoneType, int, Entity> initDrawModelComponentsAction)
        {
            var mrs        = this.GetComponentsInChildren <SkinnedMeshRenderer>();
            var motionClip = this.GetComponent <MotionAuthoring>().MotionClip; //
            var mesh       = combineAndConvertMesh(mrs, motionClip);           //

            var mat = new Material(mrs[0].sharedMaterial);

            mat.shader           = this.Shader;// ちゃんとした材質生成が必要
            mat.enableInstancing = true;

            //var drawIndex = drawres.AddDrawMeshResource( mesh, mat, this.BoneType, this.MaxInstance );
            var modelEntity = initDrawModelComponentsAction(mesh, mat, this.BoneType, mesh.bindposes.Length);

            return(DrawMeshPrefabCreator.CreatePrefab(em, mesh.bindposes.Length, modelEntity));


            // メッシュを結合する
            Mesh combineAndConvertMesh(IEnumerable <SkinnedMeshRenderer> smrs_, MotionClip motionClip_)
            {
                var qCis =
                    from mr in smrs_
                    select new CombineInstance
                {
                    mesh = mr.sharedMesh
                };

                //return ChMeshConverter.ConvertToChMesh( smrs_.ElementAt( 0 ).sharedMesh, smrs_.ElementAt(0).bones );

                var dstmesh    = new Mesh();
                var boneLength = smrs_.First().bones.Length;

                // 後でちゃんとした結合に差し替えよう
                dstmesh.CombineMeshes(qCis.ToArray(), mergeSubMeshes: true, useMatrices: false);
                dstmesh.boneWeights = (
                    from w in dstmesh.boneWeights
                    select new BoneWeight
                {
                    boneIndex0 = w.boneIndex0 % boneLength,
                    boneIndex1 = w.boneIndex1 % boneLength,
                    boneIndex2 = w.boneIndex2 % boneLength,
                    boneIndex3 = w.boneIndex3 % boneLength,
                    weight0 = w.weight0,
                    weight1 = w.weight1,
                    weight2 = w.weight2,
                    weight3 = w.weight3,
                }
                    )
                                      .ToArray();

                return(ChMeshConverter.ConvertToChMesh(dstmesh, smrs_.ElementAt(0).bones));
            }
        }