예제 #1
0
        /// <summary>
        /// 全テクスチャを結合して、ソースとなったオブジェクトのUVと材質を差し替える。
        /// 材質は、元同じだったもの同士は、新しい材質でも同じものを共有する。
        /// </summary>
        public static void PackTextureAndTranslateUv(IEnumerable <GameObject> targetObjects)
        {
            var mmts = FromObject.QueryMeshMatsTransform_IfHaving(targetObjects).ToArray();


            // 重複のない材質配列を生成。
            var dstMats = (from x in mmts select x.mats)
                          .To(MaterialCombined.QueryCombine)
                          .ToArray()
            ;

            // テクスチャを結合する。
            var(dstTexture, uvRects) = packTexture_(dstMats);


            // UV位置→頂点数情報割り当て→UV配列生成→メッシュUVに割り当て
            uvRects
            .To(x => queryJoinUvRectToVtxInfo_PerSubPerMesh_(x, mmts, dstMats))
            .To(x => queryCreateNewUvs_PerMesh_(x, mmts))
            .To(x => translateUvsInMeshes_(x, mmts))
            ;

            // 全材質を新テクスチャー材質に差し替える。
            setNewMats_(dstMats, dstTexture, mmts);

            return;



            (Texture, Rect[]) packTexture_(IEnumerable <Material> qDstMats_)
        static public Func <MeshElements> BuildStructureWithPalletMeshElements
            (IEnumerable <GameObject> children, Transform tfBase)
        {
            var mmts = FromObject.QueryMeshMatsTransform_IfHaving(children).ToArray();

            return(BuildStructureWithPalletMeshElements(mmts, tfBase));
        }
예제 #3
0
        /// <summary>
        /// Mesh 要素を結合するデリゲートを返す。位置のみ。
        /// </summary>
        static public Func <MeshElements> BuildBaseMeshElements
            (IEnumerable <GameObject> gameObjects, Transform tfBase, bool isCombineSubMeshes = true)
        {
            var mmts = FromObject.QueryMeshMatsTransform_IfHaving(gameObjects).ToArray();

            return(BuildBaseMeshElements(mmts, tfBase, isCombineSubMeshes));
        }
        /// <summary>
        /// Mesh 要素を結合するデリゲートを返す。Structure オブジェクト用。
        /// </summary>
        static public Func <MeshElements> BuildStructureWithPalletMeshElements
            (IEnumerable <StructurePartAuthoring> parts, Transform tfBase)
        {
            var gameObjects = from part in parts select part.gameObject;
            var mmts        = FromObject.QueryMeshMatsTransform_IfHaving(gameObjects).ToArray();

            return(BuildStructureWithPalletMeshElements(mmts, tfBase));
        }