Unity --- MeshRenderer之網格合并

創建如圖所示的對象結構,parent為空對象,然后將下面的代碼掛載到parent對象上運行即可。

 1 using UnityEngine;
 2 using System.Collections;
 3 
 4 public class CombineMeshAndMaterials : MonoBehaviour
 5 {
 6     void Start()
 7     {
 8         CombineMesh();
 9     }
10     void CombineMesh()
11     {
12         //收集要合并的貼圖
13         MeshRenderer[] oldMRArray = GetComponentsInChildren<MeshRenderer>();
14         Material[] oldMArray = new Material[oldMRArray.Length];
15         Texture2D[] textures = new Texture2D[oldMRArray.Length];
16         for (int i = 0, iMax = oldMRArray.Length; i < iMax; ++i)
17         {
18             oldMArray[i] = oldMRArray[i].sharedMaterial;
19             Texture2D t2d = oldMArray[i].GetTexture("_MainTex") as Texture2D;
20             Texture2D _t2d = new Texture2D(t2d.width, t2d.height, TextureFormat.ARGB32, false);
21             _t2d.SetPixels(t2d.GetPixels(0, 0, t2d.width, t2d.height));
22             _t2d.Apply();
23             textures[i] = _t2d;
24         }
25 
26         //創建合并后的材質
27         MeshRenderer newMR = gameObject.AddComponent<MeshRenderer>();
28         Material newM = new Material(oldMArray[0].shader);
29         newM.CopyPropertiesFromMaterial(oldMArray[0]);
30         newMR.sharedMaterial = newM;
31 
32         //創建合并后的貼圖,
33         Texture2D newTex = new Texture2D(1024, 1024);
34         newM.SetTexture("_MainTex", newTex);   //將合并后的貼圖賦給合并后的材質
35 
36         //重新計算貼圖UV
37         MeshFilter[] oldMF = GetComponentsInChildren<MeshFilter>();
38         CombineInstance[] combines = new CombineInstance[oldMF.Length];
39         Rect[] rects = newTex.PackTextures(textures, 10, 1024);  //貼圖打包 ,矩形的數組包含每個輸入的紋理的UV坐標
40         for (int i = 0, iMax = oldMF.Length; i < iMax; ++i)
41         {
42             Rect rect = rects[i];
43             Mesh mesh = oldMF[i].mesh;
44             Vector2[] newUVs = new Vector2[mesh.uv.Length];
45 
46             //刷新uv
47             for (int j = 0, jMax = mesh.uv.Length; j < jMax; ++j)
48             {
49                 //如果這里看不太懂,說明對uv的確切含義不太明白
50                 //uv是一個比值,u = 橫向第u個像素/原始貼圖的寬度    v = 豎向第v個像素/原始貼圖的高度
51                 //rect.x : 原貼圖在合并后的貼圖的 x 坐標,  rect.y : 原貼圖在合并后的貼圖的 y 坐標
52                 newUVs[j].x = mesh.uv[j].x * rect.width + rect.x;
53                 newUVs[j].y = mesh.uv[j].y * rect.height + rect.y;
54             }
55             mesh.uv = newUVs;
56             combines[i].mesh = mesh;
57             combines[i].transform = oldMF[i].transform.localToWorldMatrix;  //沒有這句,合并后的網格無法看到
58             oldMF[i].gameObject.SetActive(false);
59         }
60 
61         //創建合并后的網格
62         MeshFilter newMF = gameObject.AddComponent<MeshFilter>();
63         Mesh newMesh = new Mesh();
64         newMesh.CombineMeshes(combines, true, true);
65         newMF.mesh = newMesh;
66     }
67 }

轉載于:https://www.cnblogs.com/luguoshuai/p/10513304.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249477.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249477.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249477.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

css 盒模型的屬性

1、盒模型 2、display 3、浮動轉載于:https://www.cnblogs.com/Tang854416/p/9676424.html

前后端分離

、前后端分離的好處 &#xff08;1&#xff09;徹底解放前端 &#xff08;2&#xff09;提高工作效率&#xff0c;分工更加明確。 &#xff08;3&#xff09;局部性能提升 &#xff08;4&#xff09;降低維護成本 2、前后端分離的概念 后臺只需要提供API接口&#xff0c;…

Win10還原被Windows Defender隔離的文件

Win10最新版本的Windows Defender隔離/刪除的文件沒有還原的選項&#xff0c;導致很多破解文件或是注冊機直接隔離&#xff0c;到威脅歷史記錄中去卻無法恢復。經過各個嘗試&#xff0c;到微軟官方論壇中也嘗試了很多方法&#xff0c;后來發現竟然恢復啦。各位小伙伴可以試試這…

AtCoder Grand Contest 013 題解

A - Sorted Arrays 貪心&#xff0c;看看不下降和不上升最長能到哪&#xff0c;直接轉移過去即可。 1 //waz2 #include <bits/stdc.h>3 4 using namespace std;5 6 #define mp make_pair7 #define pb push_back8 #define fi first9 #define se second 10 #define ALL(x…

servlet架構解析

https://www.jianshu.com/p/d433b5fb87e2

(Review cs231n) Backpropagation and Neural Network

損失由兩部分組成&#xff1a; 數據損失正則化損失&#xff08;data loss regularization&#xff09; 想得到損失函數關于權值矩陣W的梯度表達式&#xff0c;然后進性優化操作&#xff08;損失相當于海拔&#xff0c;你在山上的位置相當于W&#xff0c;你進行移動&#xff0c…

springboot restful

https://www.jianshu.com/p/733d788ea94d

【計算機算法設計與分析】——排序

一.排序 二.插入排序 &#xff08;1&#xff09;算法描述 &#xff08;2&#xff09;性能分析 &#xff08;3&#xff09;尋求優化 三.歸并排序 &#xff08;1&#xff09;算法思想 &#xff08;2&#xff09;性能分析 &#xff08;2&#xff09;示例 &#xff08;3&#xff09…

QT 隨機數生成

下面總結了QT中隨機生成的方法&#xff08;僅供學習參考&#xff09;&#xff0c;分為舊方法和新方法&#xff0c;一般來說&#xff0c;舊的方法已經被拋棄&#xff0c;在開發新的應用中推薦使用新方法。 C Code 123456789101112131415161718192021222324#include <QCoreApp…

獲取/設置IFRAME內對象元素的幾種JS方法

獲取/設置IFRAME內對象元素的幾種JS方法 iframe瀏覽器ie文檔微軟&#xff11;。IE專用(通過frames索引形象定位)&#xff1a; document.frames[i].document.getElementById(元素的ID); &#xff12;。IE專用(通過IFRAME名稱形象定位)&#xff1a; document.frames[iframe的name…

高并發

https://blog.csdn.net/java_xth/article/details/81162088

多人游戲服務器

https://www.getmangos.eu/轉載于:https://www.cnblogs.com/aibox222/p/9682697.html

Hbase 各個角色的工作。

HMaster的作用&#xff1a; 為region server 分配region&#xff1b;負責region server的負載均衡&#xff0c;region分裂完成監控&#xff1b;處理schema更新請求&#xff0c;數據表的創建&#xff0c;更新&#xff1b;HDFS上的垃圾文件回收&#xff1b;發現失效的region serv…

Activiti中的關于子流程中的并發節點標記處理

最近在研究一個輕量級的工作流引擎Activiti&#xff0c;就遇到了子流程中無法標記其并發節點的問題&#xff0c;經過幾天的研究&#xff0c;想到了一個簡單易懂的方法&#xff0c;總結如下&#xff0c;希望對你們能有所幫助&#xff0c;有寫的不對的地方&#xff0c;還希望大家…

[WPF 基礎知識系列] —— 綁定中的數據校驗Vaildation

[WPF 基礎知識系列] —— 綁定中的數據校驗Vaildation 原文:[WPF 基礎知識系列] —— 綁定中的數據校驗Vaildation前言&#xff1a; 只要是有表單存在&#xff0c;那么就有可能有對數據的校驗需求。如&#xff1a;判斷是否為整數、判斷電子郵件格式等等。 WPF采用一種全新的方式…

ModuleNotFoundError: No module named 'win32api'

啟動一個工程的cmd&#xff1a; scrapy crawl HI 如果 運行報 No module named “win32api” 要安裝 pip install pypiwin32 這個包轉載于:https://www.cnblogs.com/hailong88/p/10528618.html

powercmd注冊碼

用戶名&#xff1a;nzone注冊碼&#xff1a;PCMDA-86128-PCMDA-70594 http://www.baidu.com/

Servlet其實是單例多線程

https://blog.csdn.net/xiaojiahao_kevin/article/details/51781946

解決“跨域問題”的幾種方法

&#xff08;0&#xff09;使用注解方式&#xff0c;這個可能有些框架可以&#xff0c;有些不行&#xff0c;在要訪問的方法前面加上此注解即可&#xff1a; CrossOrigin &#xff08;1&#xff09;使用 Access-Control-Allow-Origin 設置請求響應頭&#xff0c;簡潔有效。 &am…

Conda 安裝本地包

有的conda或pipy源太慢&#xff0c;conda install xxx或者pip install xxx下載會中斷連接導致壓縮包下載不全&#xff0c;本地的安裝包沒法完全安裝, 遇到這個問題時&#xff0c;我們可以用p2p工具-迅雷等先下載指定包再用conda或pip安裝 pip 安裝本地包pip install D:\XXX.w…