?楊航最近在自學Unity3D,打算使用這個時髦、流行、強大的游戲引擎開發一個三維業務展示系統,不過發現游戲的UI和業務系統的UI還是有一定的差別,很多的用戶還是比較習慣WinForm或者WPF中的UI形式,于是在網上搜了一下WinForm和Unity3D如何集成,結果不是非常令人滿意,絕大多數的回答是“No?Way”,也有人給出了使用WebBrowser控件的形式,說實話這種還算是比較靠譜的,以前也這么干過類似的事情;后來搜到一篇帖子說是可以使用U3D?WebPlayer控件,抱著試試看的想法,新建了一個winform應用,在工具箱里面還真找到了UnityWebPlayer?Control這么一個控件:?
???????????
??????????
?????????
?????????
?????????
??????????
??????????
?????????
???????????將它拖到form上以后,發現屬性很少,大部分都是Control的屬性,不過還是發現了一個很重要的屬性:src,這里將發布的web包地址寫進去,運行一下,奇跡出現了,竟然出現了三維場景界面。。。
??????????
??????????
??????????
??????????
???????????
???????????
??????????
????????????請忽略三維場景內容,實在是拿不出手哇
???????????
???????????
???????????這里留一個問題:.unity3d?文件的路徑只能在設計時的屬性窗口直接賦值,在Form的構造函數或者Load事件中賦值都沒有效果,具體原因還沒找到。
??????????
??????????這樣的話算是實現了之前的需求:將U3D和Winform結合,不過winform的控件如何和U3D進行交互呢?再看一下UnityWebPlayerClass類的定義,發現有一個SendMessage方法,和U3D自身腳本的SendMessage定義一樣。?
?????????
??????????
??????????
??????????下面首先在U3D中創建一個C#腳本,添加一個非常簡單的函數:?
??????????void?Down()
?????????{
????????????transform.Translate(?Vector3.down?*?Time.deltaTime?);
?????????}?
????????? 將腳本拖到叫做Sphere的對象上面。然后在窗體上添加一個按鈕,在按鈕的click事件中調用上面定義的方法:?
??????????axUnityWebPlayer1.SendMessage(?"Sphere",?"Down",?null?); 再次運行,不停地點擊按鈕,就可以看到小球緩慢往下移動的效果了。
??????????
???????????
????????????
????????? 經過上面的嘗試,總算是初步解決了U3D和Winform(WPF也類似)集成的問題,不過核心的對象控制代碼還是得在U3D中寫好、編譯才行,winform只是提供了一個更為習慣的UI而已。不知道是否還有更好、更方便、更強大的方法,期待。。。?
???????????
??????????
?????????
?????????
?????????
??????????

??????????
?????????
???????????將它拖到form上以后,發現屬性很少,大部分都是Control的屬性,不過還是發現了一個很重要的屬性:src,這里將發布的web包地址寫進去,運行一下,奇跡出現了,竟然出現了三維場景界面。。。
??????????

??????????
??????????
??????????
???????????

???????????
??????????
????????????請忽略三維場景內容,實在是拿不出手哇
???????????

???????????
???????????這里留一個問題:.unity3d?文件的路徑只能在設計時的屬性窗口直接賦值,在Form的構造函數或者Load事件中賦值都沒有效果,具體原因還沒找到。
??????????
??????????這樣的話算是實現了之前的需求:將U3D和Winform結合,不過winform的控件如何和U3D進行交互呢?再看一下UnityWebPlayerClass類的定義,發現有一個SendMessage方法,和U3D自身腳本的SendMessage定義一樣。?
?????????
??????????

??????????
??????????下面首先在U3D中創建一個C#腳本,添加一個非常簡單的函數:?
??????????void?Down()
?????????{
????????????transform.Translate(?Vector3.down?*?Time.deltaTime?);
?????????}?
????????? 將腳本拖到叫做Sphere的對象上面。然后在窗體上添加一個按鈕,在按鈕的click事件中調用上面定義的方法:?
??????????axUnityWebPlayer1.SendMessage(?"Sphere",?"Down",?null?); 再次運行,不停地點擊按鈕,就可以看到小球緩慢往下移動的效果了。
??????????
???????????

????????????
????????? 經過上面的嘗試,總算是初步解決了U3D和Winform(WPF也類似)集成的問題,不過核心的對象控制代碼還是得在U3D中寫好、編譯才行,winform只是提供了一個更為習慣的UI而已。不知道是否還有更好、更方便、更強大的方法,期待。。。?