用Unity最不習慣的就是 一切都是gameobject, 連要畫個 mesh也要object.
gameobject.transform. 一堆.transform相關的函數........
根本沒必要..
兩個相同的mesh,用gameobject, 要存兩分mesh,
多個不就更麻煩了? 還有 動態 產生mesh,又要複製go...
又要釋放..... mesh的資料 就是一次載入就好.
找了半天, 終於找到: Graphics.DrawMesh(), 只要寫在Update()就跟以前用c++ 迴圈一樣的寫法了。最主要是想畫很多個相同的mesh.
public static void DrawMesh(Mesh mesh,
Matrix4x4 matrix,
Material material,
int layer,
Camera camera = null,
int submeshIndex = 0,
MaterialPropertyBlock properties = null,
bool castShadows = true,
bool receiveShadows = true,
bool useLightProbes = true);
好用的這個函數就夠了。
(Mesh mesh,
Matrix4x4 matrix,
Material material) 參數這幾個就夠了.
這就很像 一般用 d3d 自己會寫的render含數 會傳的參數。
unity 的 Matrix4x4 函數也很難用, 為何不直接照D3D的 Matrix函數就好?
學3D最重要的就是 Matrix,, 弄懂這個就夠了。
----------------------------------------------------------------
還有在 Update() , 直接把整個logic寫在裡面加上Graphics.DrawMesh().
速度會比事先算好gameboject的位置, 還慢。
所以 只執行一次的 logic, 變成要先算好位置, 存起來, 在Update()的 Graphics.DrawMesh(). 只畫位置。
所以這就是跑 script的缺點。
void Update () {
for (int i = 0; i < m_szRenderWin.Count; i++)
Graphics.DrawMesh(m_szRenderWin[i].mesh, m_szRenderWin[i].matrix/*
Matrix4x4 */, m_Material, 0);
}