發表文章

目前顯示的是 6月, 2022的文章

[Houdini]L-System 初步了解

圖片
 L-System語法 緣由 經過朋友分享Houdini的學習過程時,了解到裡面可以使用Lindenmayer 個系統,也就是L-System,他是由荷蘭生物學和植物學家 Aristid Lindenmayer 所提出的數學模型,可以廣泛應用於植物生長過程的研究,而在3D軟體,則可以依照這些規則來產生需要的植物。 符號 F    往前一步,並畫一條線 f      往前一步,不畫線 +     左轉 δ 度 -     右 轉 δ 度 [     開始一個分支 ]     完成一個分支 X,Y   為變數,變數不畫線,但是要記得他們的存在 有其他語法不過目前我們先用這些就好 依  維基百科  所寫 L-System 應該會像: 變數: AB 常量: 公理(Axiom): A 規則: (A->AB),(B->A) 所謂的公理,就是系統的初始點,像是這裡的公理為A,所以我們由A開始走 然後再依規則進行疊代。 示範 矩形路徑 下面來簡單的示範 我們的 δ 在此設為 90 度,也就是我們目前的轉彎都是單純的正左轉正右轉。 n = 3   F F->F[-XF]F X->F[x] 開始畫吧: n = 0 因為我們的公理定為 F,所以一開始為向前走一步並且有畫線。 我們以紅色為起點向前走一步吧! n = 1 進行第一次疊代,這時我們要依照給的兩條規則來執行。 由於沒有X在場上,所以我們這次只跟隨規則 F->F[-XF]F 注意一點是,我們有箭頭符號對吧。 你可以把他想成變身,我們的F變身成F[-XF]F了,所以會直接取代原本的F, 而不是繼續畫上去。 在這張圖我用了3步驟來解釋是怎麼變成最右邊那張圖的, 便更好的解釋規則語法。 F[-XF]F a.  F  : 我們裡所當然的畫一條線F 1 b.  [-XF]  : 中括號的意思就是 分支 ,也就是新的樹枝,我們想像在目前位置跟目前的方向,開啟一個獨立的 工作站 ,且 不會影響 到本體。 我們再來看他的要求是什麼: 指令是 -XF ,所以我們先向右...

[Unity]客製化Inspector

圖片
 設計自己的Inspector! 緣由 自從改用GameManager的GameLoop來統一控制遊戲的整體流程後,唯一讓我困擾的是他的Inspector視窗,裡面的屬性真的太長~了,每次要除錯都要找一下子,雖然各資料屬性是class所以可以摺疊,但總歸還是非常不便(如圖,很長一大串)。 Editor資料夾 要使自己的腳本是在編輯中執行而不是在遊戲中執行的話,需要在Assets根目錄下新增一個資料夾取名為Editor,經由特殊資料夾名稱,系統會將下面的腳本認定為Editor 腳本(如圖)。 腳本 匯入與繼承 如我在資料夾內的那3個腳本一樣,新增一個腳本然後取一個你想要的名字吧。 1.首先需要匯入編輯器的命名空間 UnityEditor 2.然後添加Attribute : CustomEditor,其用途是告訴編輯器,哪一個腳本是你要自訂的對象。 3.使你腳本改繼承 Editor using System.Collections; using System.Collections.Generic; using UnityEditor; /// <summary> /// 客製化GameManager (MainGameLoop) 的視窗 /// </summary> [CustomEditor(typeof(MainGameLoop))] public class GameManagerInspector : Editor { 覆寫Inspector的GUI設計 Editor有很多功能可以覆載,我們這次只要處理Inspector,所以只要覆載OnInspectorGUI就好。 並且指定要編輯的物件 _gameLoop,這裡有一點要注意,是可以多物件編輯的,但是Editor.target只會引用第一個已編輯物件。 public class GameManagerInspector : Editor { public override void OnInspectorGUI() { MainGameLoop _gameLoop = (MainGameLoop)target; 開始Inspector內的處理吧 GameLoop內的屬性簡單介紹 在進行Inspector的覆寫之前,先來介紹...