2012-11-13 18 views
8

我試圖表現出像「圖層碰撞黑客帝國」中統一顯示在編輯器的二維數組: enter image description here統一定製編輯器,如「層碰撞矩陣」

雖然不是複選框我需要整個網格(而不是三角形)。我似乎無法弄清楚如何做到這一點,雖然...我可以得到一個自定義編輯器,但使網格失敗。那麼,有沒有什麼方法可以看到物理管理器編輯器的代碼(層碰撞矩陣在那裏),或者有人知道這樣做的好方法?

注意:首選語言是c#,儘管任何都可以。

謝謝。

回答

6

您所尋找的代碼非常複雜,所以我要依靠您來了解我在這裏所說的內容。 The Unity docs are your friend.

  1. 創建GUIArea您的特殊編輯工具會。在它裏面,放置一個 函數調用,然後調用其他渲染函數。我懷疑你會想在這裏做一些封裝。將gui封裝在另一個函數中將允許您複製它的功能(在抽象的限制範圍內)並更輕鬆地在屏幕上移動。

  2. 設計三個定位點(Vector2)。它們應分別代表行標籤,列標籤和數據字段的左上角 座標。注意 行錨點需要直接在上面(與x值相同) 行錨點,因爲旋轉(下一步)將轉換錨點。

  3. 使用GUIUtility.RotateAroundPivot()將GUI變換 矩陣圍繞列定位點旋轉90°。

  4. 寫一個很長的GUI.Label(或其中幾個)爲您的標籤。 將它們錨定在列錨處。根據上面的圖片,您的標籤 字符串可能會讀取類似 「Default \ nTransparentFX \ nIgnoreRaycast \ nWater」,其中\ n創建 換行符。

  5. 再次旋轉-90°回到原始矩陣。或者,您可以在步驟3之前複製GUI.matrix,然後將其分配給 保證矩陣重置。來回旋轉可能由於浮點和其他不精確而導致一些錯誤。

  6. 爲行寫入標籤。與前兩步相同的方法。錨點 他們在行錨點。

  7. 這是更難的部分。遍歷數據字段,爲數據中的每個元素創建一個 小EditorGUI.IntField()StringField()或甚至 ObjectField()。每個元素 都需要自己的錨點,然後與數據字段錨點進行求和。 如果您的數據字段是正方形的二維數組,那麼派生錨將很容易 - 儘管您的陣列中也會有空元素(如果您需要上述確切功能,您需要使用 )。如果你想 節省內存,你必須使用一些棘手的數學將元素索引轉換爲 座標。我不知道我的 頭上有多高,我該怎麼做。

希望我不會忘記任何事情。 Unity的GUI是一個b ----。評論,我會盡我所能來幫助你。

+1

謝謝,看起來不錯。我不知道有關RotateAroundPivot的事情(顯然沒有找到足夠深入的內容)。其餘部分看起來相對簡單(雖然,正如您所說,GUI可能有點令人討厭)。謝謝!當我做到這一點時,我會發布我的代碼,雖然沒有時間atm,所以可能會有一段時間。 –

+0

很高興它仍然相關。我注意到這個問題已經兩個月了:P – cjcurrie

+1

是的,目前我用一種不太用戶友好的方式解決了它,但是沒關係,因爲只有我必須使用它。 –