【Unity 插件推薦】Unity-SerializeReferenceExtensions 多型序列化工具

目錄
【Unity 插件推薦】Unity-SerializeReferenceExtensions 多型序列化工具,打破 Inspector 限制!

前言

 

我們都知道 Unity 預設支援的 SerializeReference 效果相當簡陋,基本上除了能顯示類型外,幾乎無法直接在 Inspector 中進行任何操作。

雖然理論上可以透過【自訂 Editor 擴充功能】或【撰寫 PropertyDrawer】來改善體驗,但這樣做不僅耗時,還需要對 Unity 編輯器 API 有相當深入的理解。

 

好消息是——社群早就有人替我們解決了這個問題!

今天要介紹的插件 Unity-SerializeReferenceExtensions,正是專為多型序列化打造的可視化工具,讓你能輕鬆地在 Inspector 中操作【抽象類別】、【介面】或【多層級物件】,徹底解放 Unity 原生序列化的限制。
我們都知道 Unity 預設支援的 SerializeReference 效果相當簡陋,基本上除了能顯示類型外,幾乎無法直接在 Inspector 中進行任何操作。  雖然理論上可以透過【自訂 Editor 擴充功能】或【撰寫 PropertyDrawer】來改善體驗,但這樣做不僅耗時,還需要對 Unity 編輯器 API 有相當深入的理解。    好消息是——社群早就有人替我們解決了這個問題!  今天要介紹的插件 Unity-SerializeReferenceExtensions,正是專為多型序列化打造的可視化工具,讓你能輕鬆地在 Inspector 中操作【抽象類別】、【介面】或【多層級物件】,徹底解放 Unity 原生序列化的限制。

 

 

插件介紹

 

Unity-SerializeReferenceExtensions 是由開發者 mackysoft 所製作的開源工具,主要用來強化 Unity 對 SerializeReference 屬性的支援。

它能讓你在 Inspector 面板中,直接以下拉選單(SubclassSelector)的方式選擇多型物件,並支援【列表(List)】、【陣列(Array)】等集合型資料結構。

 

這款插件最大的特色,是在不改動 Unity 底層序列化機制的前提下,透過【自訂屬性標籤(Attribute)】與【Editor 擴充】,提供更直覺的操作介面。

開發者可以為【抽象類別】、【介面】或【衍生型別】建立可視化的編輯體驗,並透過 AddTypeMenu 屬性來定義自訂【路徑】與【命名】,使大型專案的資料結構管理更加清晰。

Unity-SerializeReferenceExtensions 插件示意圖

 

功能特色

  1. 靈活的多型控制支援
    透過內建的 SubclassSelector 屬性,開發者可以在 Inspector 面板中直覺地選擇【抽象基類】或【介面】的具體實作類別,無論是【單一物件】、【陣列】,還是清單(List),都能輕鬆操作。
  2. 【自訂類別選單】與【結構化管理】
    使用 AddTypeMenu 屬性,能為子類別定義【自訂路徑】與【顯示名稱】,使複雜資料的分類更清晰;同時還能透過取消 Serializable 標籤的方式隱藏不需要的類別選項,方便維護大型專案中的多層級物件架構。
  3. 【零侵入式擴充】與【穩定整合】
    無需改動 Unity 原生序列化系統,只需引入簡單的屬性標籤即可啟用功能,與現有專案完全相容;這種輕量化設計能有效降低整合風險,並維持編輯器操作的【穩定性】與【效能】。

 

適用場景

  1. 模組化資料系統建構
    適用於需要【頻繁替換】或【擴充資料類型】的場景,例如【武器系統】、【AI 行為樹】、【任務模組】等,開發者能透過 Inspector 直接管理不同型別的子物件,減少重複編碼。
  2. 【多型物件配置】與【可視化】
    當專案中包含【抽象基類】或【介面型別】的成員時,插件能讓這些多型物件直接顯示於編輯器中,並支援即時編輯;這讓設計師與工程師能同步調整內容,實現更高效的跨部門協作流程。
  3. 複雜遊戲資料序列化
    在需要序列化多層級結構,如【技能組合】、【事件觸發鏈】、【行為模板】的情境下,插件可確保資料結構在【編輯】與【運行階段】保持一致,並避免手動維護【JSON】或【ScriptableObject】帶來的錯誤風險。
【Unity 插件推薦】Unity-SerializeReferenceExtensions 多型序列化工具,打破 Inspector 限制!

 

 

Unity-SerializeReferenceExtensions 插件下載安裝

 

Github 下載連結:Unity-SerializeReferenceExtensions

Github 下載連結:Unity-SerializeReferenceExtensions

 

 

Unity-SerializeReferenceExtensions 使用說明

 

1.測試用例

為了方便後續測試,我先建立一個基本的 SerializeReference 使用用例。

using System;

using UnityEngine;

//可序列化的抽象基類

[Serializable]

public abstract class Weapon

{

   public abstract void Attack();

}

//創建具體實現類1

[Serializable]

public class Sword : Weapon

{

   public int damage = 10;

   public override void Attack() => Debug.Log("Swing sword!");

}

//創建具體實現類2

[Serializable]

public class Gun : Weapon

{

   public int bullets = 30;

   public override void Attack() => Debug.Log("Fire gun!");

}

public class Player : MonoBehaviour

{

   [SerializeReference]

   private Weapon currentWeapon;

   [SerializeReference]

   private List<Weapon> listWeapon;

   [SerializeReference]

   private Weapon[] arrayWeapon;

}

 

效果如下。

效果如下。

 

我們可以看到 Unity 預設支援的 SerializeReference 效果非常簡陋,基本上做不了任何操作。

 

2.SubclassSelector 屬性

public class Player : MonoBehaviour

{

   [SerializeReference, SubclassSelector]

   private Weapon currentWeapon;

   [SerializeReference, SubclassSelector]

   private List<Weapon> listWeapon;

   [SerializeReference, SubclassSelector]

   private Weapon[] arrayWeapon;

}

 

效果如下。

效果如下。

 

注意事項

  • 我們也應該使用 SerializeReference 屬性進行標記
  • 你可以用它標記基本類型(包括介面),允許您更改陣列、列表和單個元素
  • 記得為具體實作的子類別加上 Serializable 特性,不然下拉選擇選單會找不到該子類別選項,我這裡已經加了。
  • 如果是數組或列表數據,記得基類要加上 Serializable 特性,我這裡已經加了。
     

 

3.AddTypeMenu 屬性

我們可以為具體實作類別新增 AddTypeMenu 屬性,自訂它的路徑和名稱。

//創建具體實現類1

[AddTypeMenu("Data/劍")]

[Serializable]

public class Sword : Weapon

{

   public int damage = 10;

   public override void Attack() => Debug.Log("Swing sword!");

}

//創建具體實現類2

[AddTypeMenu("槍")]

[Serializable]

public class Gun : Weapon

{

   public int bullets = 30;

   public override void Attack() => Debug.Log("Fire gun!");

}

 

效果如下。

效果如下。

 

4.選擇選單中隱藏子類

前面我已經說過了,一定要給具體實作的子類別加上 Serializable 特性,不然下拉選擇選單會找不到該子類別選項,所以反過來我們要隱藏哪個子類別選項就去掉 Serializable 特性。

例如我們可以選擇隱藏 Sword 項。

//創建具體實現類1

public class Sword : Weapon

{

   public int damage = 10;

   public override void Attack() => Debug.Log("Swing sword!");

}

//創建具體實現類2

[Serializable]

public class Gun : Weapon

{

   public int bullets = 30;

   public override void Attack() => Debug.Log("Fire gun!");

}

 

效果如下。

效果如下。

 

 

Unity-SerializeReferenceExtensions 多型序列化工具相關介紹 & 教學影片

 

Serialize Reference, Serialize Field, Serializable and Scene Serialization in Unity | Unity Tutorial

 

 

Unity-SerializeReferenceExtensions 多型序列化工具相關網站 & 插件下載點

 

Unity-SerializeReferenceExtensions

Github 下載連結:Unity-SerializeReferenceExtensions

 ———————————————— 

 

更多好用插件:【Unity 好用插件推薦】持續更新,一遊戲開發事半功倍!

 

 

 

本文原創(或整理)於亞洲電玩通,未經作者與本站同意不得隨意引用、轉載、改編或截錄。

特約作家簡介

X
A
Y
B
JamXu的頭像
JamXu
10年遊戲研發
20年遊戲玩家
30年遊戲人生

經中華網龍遊戲 企劃進入遊戲圈,然後被雷打到去學 程式前後端又學了點 設計帶帶幾個研發團隊,見證了 3D 渲染技術及遊戲引擎互相進步,也見證了研發代理的更迭與博弈遊戲的興起,再毅然研究起 SEO 網路行銷社群廣告投放,深信自研自賣才是最大贏家,期望能為台灣研發重回輝煌時光貢獻一點力量。如果你也有 遊戲夢,歡迎交流認識。


支持贊助 / DONATE

 

亞洲電玩通只是很小的力量,但仍希望為復甦台灣遊戲研發貢獻一點動能,如果您喜歡亞洲電玩通的文章,或是覺得它們對您有幫助,歡迎給予一些支持鼓勵,不論是按讚追蹤或是贊助,讓亞洲電玩通持續產出,感謝。

亞洲電玩通AsiaGameMaster - Steam 遊戲鑑賞家
亞洲電玩通AsiaGameMaster - FB 粉絲專頁
亞洲電玩通AsiaGameMaster - IG 粉絲專頁
亞洲電玩通AsiaGameMaster - Twitter
亞洲電玩通AsiaGameMaster - Yoytube 粉絲專頁
亞洲電玩通AsiaGameMaster - Tiktok

BTC

亞洲電玩通AsiaGameMaster - BTC 鏈贊助地址

bc1psp8nnerlepv56nyfha6mqwnp3yr7qqjdw44c6qt5lx5r2urma7fqykxvwj

 

ETH

亞洲電玩通AsiaGameMaster - ETH 鏈贊助地址

0xB2231557bc418201922DD7C2673ec97E67E35F83

 

TRON

tron-qrcode亞洲電玩通AsiaGameMaster - TRON 鏈贊助地址

TAomNj4L6vMJuaJmbWUdmT1uAWYPf9vDjp

延伸閱讀