前往
大廳
主題

【Unity 筆記】自定義Inspector顯示:Editor 與 PropertyDrawer 的差異?

澄鷹 | 2024-02-04 21:00:04 | 巴幣 1010 | 人氣 105

  ※本篇不會詳細描述自定義Inspector樣式的撰寫方法。

  有時候想把一堆有相關的功能寫在一起,並用enum區分後再處理時,會發現如果沒有依照選擇的enum隱藏不必要的屬性的話,會讓整個inspector設定變得超長的,尤其是如果是List的話,直接攤開的長度,根本受不了。
  而且如果不隱藏不必要的屬性,其實有時候自己都會亂掉......我enum選這個值,所以我會用到的屬性是......哪些?
  目前自己私下正在做一款遊戲,會需要寫RPG中NPC的行為,這之中可以設定的東西實在太多了,又希望能夠把NPC的行為做得好一點,於是決定要來接觸一下自定義inspector樣式,也希望能讓之後的開發更快一點。
  先來介紹一下我想要做甚麼事情:
  • 我會定義這個NPC出現的時機點,所以我會需要設定:
    • 在甚麼地圖出現
    • 在地圖的甚麼座標出現
    • 在遊戲中的甚麼時間點出現(月、日、時、分、秒)
    • 是否會在固定的時間循環重複出現(月、日、時、分、秒)
      • 若決定重複,就把時間點設定關掉
    • 依照上述的設定,寫出最終使用的時間戳記(唯讀)
  • 另外我會定義這個NPC出現後的行為
    • 是否循環動作
    • 每次動作間隔時間
    • 動作列表
      • 動作類型(移動、原地等待、轉移地圖、表情、停止
      • 面向(除了停止以外都會有)
        • 繼承原面向、隨機、上、下、左、右
        • 若為繼承的話,就是該怎麼做怎麼做,往上走就會面上,往左走就會面左;其他五種會固定面向到完成動作。
      • 是否隨機行走(只有移動有)
      • 是否固定速度(只有移動有)
      • 速度(只有移動有,且只會在固定速度勾選時出現)
      • 動作時長(只有移動與原地等待有,且在移動類型時,只會在固定速度不勾選時出現)
      • 目標地圖(只有轉移地圖有)
      • 目標座標(只有移動與轉移地圖有,且在移動類型時,只會在隨機行走不勾選時出現)
      • 表情類型(只有表情有)
  如果把上述這些想法,寫好物件後直接放到Inspector上會長這樣:
  有沒有覺得......好像有點長?如果這個NPC會出現在好幾個地方,而且他有很多種行為的話,那應該會很難整理哦!
  我們來試試把不需要的東西隱藏後會長甚麼樣子吧!
  在上面的設定中,我設定了一些行為:
  • 這個NPC會在遊戲內的每分鐘都出現在「Home 1F」這張地圖的(-3.5, 2.5)座標上。
  • 出現後會毫不猶豫地以2的速度先移動到(-4.5, 13)座標後,出現「What」表情,然後結束動作。
  想想光是行為我就定義了三種,如果不把它隱藏的話,那會有多長!隱藏之後的長度,竟然只比不隱藏多了一點,這看起來不是舒服多了嗎XD

  好,那我想自定義樣式,該怎麼做?當時上網查到兩個版本:Editor 與 PropertyDrawer。
  明明內容看起來大同小異,也好像都可以達到目的,那為什麼需要分成這兩種?經過漫長的碰壁,我才發現了很簡單也很直觀的區別:
  ── Editor 管最外層,也就是這個腳本下的內建屬性們。
  ── PropertyDrawer 管的就是被放在腳本底下的「自定義物件」們。
  舉一個簡單的例子:
  如果我想定義id、scriptInt、scriptBool的樣式,那我應該要為CustomScript寫一個自定義的CustomEditor。但如果我是想要定義CustomScript中CustomProperty物件的樣式,我應該是為CustomProperty寫一個自定義的CustomPropertyDrawer,而不是選擇從CustomEditor中往下定義CustomProperty的樣式。
  這個盲點我找了好久,由於從外層的CustomEditor往下定義CustomProperty時有遇到一些瓶頸,加上我上述NPC的例子中是使用List,讓我卡關卡了好一陣子。
  那時候發現如果從外層想要為List中每一個項目都設置樣式的話,好像會需要自己重新繪畫各property的位置和尺寸,甚至我還遇到不同項目無法獨立設置樣式的問題。
  但當我理解了CustomProperty應該要另外定義的時候,我整個豁然開朗,原來我思考的方向從一開始就錯了XD!
  這次應該算是小小的分享,單純分享我為什麼想自定義樣式,以及我在嘗試這樣做時的盲點XD

  Unity使用版本:2023.1.9f1
送禮物贊助創作者 !
0
留言

創作回應

更多創作