Unity – 與 windows application 連動

在 Unite2015「MEVIUS FINAL FANTASYにおけるUnity開発事例」的演講中提到了和 window application(以下簡稱為 app) 連動的功能,於是原文作者便做了個嘗試。

蠻有趣的東西,應該會有人有興趣,給不諳日文的朋友們簡單翻譯~
這裡假設讀者有一定的 Unity & windows form 經驗,許多細節會跳過嘿XD

需準備的

  • Visual Studio (Express也可,他是使用2013版)
  • Unity (他使用 4.6.4p1)

製作 DLL

VisualStudio 中選擇 「新增專案」→「Visual C#」→「Windows Form 應用程式」,產生雛形檔。

進入專案(Project)的屬性設定(Property),設定以下參數:

  • 目標 Framework 設為「.NET Framework 3.5」
  • 輸出類型設為「類別庫(Library)」

接著專案的參考(Reference)追加「UnityEngine.dll」&「UnityEditor.dll」。
相關 DLL 的存放位置請參考「Managed Plugins」。

最後,打開「Program.cs」,將原有的 Main function 刪除,改成以下:
(一般程式開始時會呼叫 Main,倘若沒有刪除就會和 Unity 一併啟動)

public static void Launch()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Form1 form = new Form1();
    form.Show();
}

另外,別忘了把 class 的權限改成 public 嘿!

到這裡就可以建置 DLL 囉~

併進 Unity

將剛才的 DLL 放進 「Assets/Plugins」資料夾內。

準備一個觸發用的事件點(這裡用 OnGUI 的 button)

void OnGUI() {
    if (GUI.Button(new Rect(10, 10, 200, 30), "起動")) {
        Program.Launch();
    }
}

別忘了引用(using)你的 DLL 使用的 namespace~

啟動

執行 Unity 按下畫面上的 「啟動」就會開啟 DLL 裡面的程式囉~

用途?

在 app 端 reference UnityEngine & UnityEditor 之後,便可以使用 Unity 的功能。
例如:直接存取 AssetBundle。
如此一來便可在 app 設定 AssetBundle 的參數之類的。

前面提到的「MOBIUS FINAL FANTASY」,我猜就是透過這樣的方式調整時間軸之後,再回寫到 AssetBundle。

已知狀況

製作過程中會產生的問題解法。

DLL 端參考 UnityEditor.dll 的話無法通過建置

目標 Framework 的設定版本低於 3.5 (例如 2.0)所引發的。

Unity 端發生「Unhandled Exception: System.TypeLoadException」的錯誤

DLL側でFormのメンバフィールドを持つと発生しました。
(看不懂觸發的原因,我自己也沒遇過,故放上原文)
Unity 端將「PlayerSettings」→「Api compatibility Level」設為「.NET 2.0」。
(用以不使用 subset)

app 顯示的時候 Unity 就會鎖住

這是使用強制回應(Modal)的關係。
改用非強制型的即可。

Form.Show()

Mac 無法使用

本來就是啟動 window application,在 mac 開不起來也是正常的吧~
使用 MonoDevelop 開發或許有機會?

開啟 app 時出現「Could not register the window class, win32 error 0」的錯誤

原因不明。只有剛建置完的第一次啟動會出現的關係,可能結束漏處理了甚麼吧…
有甚麼相關的資訊的話麻煩告知小弟!

原文:UnityとWindowsアプリケーションの連動

ref:
Displaying Modal and Modeless Windows Forms
How to: Specify Build Events (C#)

 

後話

一開始看到的時候的確令人振奮,想說終於可以擺脫 unity 那該死的介面惹~
可能是我 windows form 的經驗並不多,嘗試做了一些功能後,並沒有想像中用起來那麼得心應手。
目前唯一最有幫助的就只有處理拖拉外部檔案的功能吧~XD

兩邊真的各有優缺點…(´_ゝ`)

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s