數學的數字是沒有單位, 1可以是 1公斤, 1 塊錢, 1顆蘋果。
兩個人溝通好單位就行。
紅色的都沒有單位, 那就兩個約定是公尺就好。 x=13.892 就是 13.892m. 就是這樣。
如果要做12公分就是0.12
這就是最簡單的方法, 又不是所有的軟體都會有單位, 所以只需要數字就好。
又不是 你是台灣用公尺, 另一個人在美國用 英吋。 才需要定單位轉換。
obj的檔案 完全沒有單位, 如果要單位 就是依照原來定的 -79.94121就是-79.94121公尺
以前自己做的, 用了一個很奇怪的比例: 180公分=16單位。 10幾年前自己亂定。 反正所有的東西都是相對人眼下去測量的,所以就定人物高度180cm, 為什麼是16單位? 不知道 反正是直覺, 10幾年前 也沒太多資訊可以參考。
也都沒問題, 這種奇怪的比例, 根本很難看數字計算, 當然就建個立方體,高度16單位,
告訴美術這是人180公分, 房子 ..樹.. 都是用這個比例去估。
回來的模型, 最多在簡單調一下騎樓的高度而已。
一分鐘學會Unity
經過幾個月的實做,終於了解Unity怎麼運作的。 很多Unity的教學都沒有把基本的觀念說得清楚。常會變的瞎子摸象。
1. Unity一開始執行(按上面的>三角形箭頭)
2.Unity會將 Hierarchy下的這些物件(GameObject)先產生(這是空的)。
3.例如Cube的物件,右邊Inspector 有Cube(Mesh Filter),這是一個component.
產生Cube後也會同時產生這個Cube(Mesh Filter)的component.
這個 Mesh Component 是掛在Cube這個GameObject.
4.產生Box Collinder 這個 component.
5.產生Mesh Render 這個 component.
6.你寫的script C# , Unity並無法執行到, 必須加一個動作, 就是把Script 加到Cube.
當作是 Cube的component. 這樣Unity才會進入你的code執行。
Unity的原理就只有這樣而已, 其他的就是單純的寫code(查api)。
Unity: Graphics.DrawMesh()
用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);
}
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);
}
訂閱:
文章 (Atom)