/// <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)); }
/// <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)); }