https://www.cnblogs.com/cnxkey/articles/5394378.htmljavascript
最近在自學Unity3D,打算使用這個時髦、流行、強大的遊戲引擎開發一個三維業務展現系統,不過發現遊戲的UI和業務系統的UI仍是有必定的差異,不少的用戶仍是比較習慣WinForm或者WPF中的UI形式,因而在網上搜了一下WinForm和Unity3D如何集成,結果不是很是使人滿意,絕大多數的回答是「No Way」,也有人給出了使用WebBrowser控件的形式,說實話這種還算是比較靠譜的,之前也這麼幹過相似的事情;後來搜到一篇帖子說是可使用U3D WebPlayer控件,抱着試試看的想法,新建了一個winform應用,在工具箱裏面還真找到了UnityWebPlayer Control這麼一個控件:html
這樣的話算是實現了以前的需求:將U3D和Winform結合,不過winform的控件如何和U3D進行交互呢?再看一下UnityWebPlayerClass類的定義,發現有一個SendMessage方法,和U3D自身腳本的SendMessage定義同樣。java
下面首先在U3D中建立一個C#腳本,添加一個很是簡單的函數:web
void Down() { transform.Translate( Vector3.down * Time.deltaTime ); }
將腳本拖到叫作Sphere的對象上面。而後在窗體上添加一個按鈕,在按鈕的click事件中調用上面定義的方法:
axUnityWebPlayer1.SendMessage( "Sphere", "Down", null );函數
再次運行,不停地點擊按鈕,就能夠看到小球緩慢往下移動的效果了。
通過上面的嘗試,總算是初步解決了U3D和Winform(WPF也相似)集成的問題,不過核心的對象控制代碼仍是得在U3D中寫好、編譯才行,winform只是提供了一個更爲習慣的UI而已。不知道是否還有更好、更方便、更強大的方法,期待。。。
這文章對我頗有用處,可是我使用控件後,設置src屬性,運行提示錯誤說不是有效的u3d網頁文件,src地址要是所有地址,直到.unity3d,例如:c:\**\**\**.unity3d。
AxUnityWebPlayer ax = new AxUnityWebPlayer(); ax.BeginInit(); ax.CreateControl();// 關鍵 ax.Location = new Point(0, 0); ax.Size = new Size(200, 200); ax.Dock = DockStyle.Fill; ax.src = Application.StartupPath + "\\abc\\abc.unity3d"; splitContainer1.Panel1.Controls.Add(ax); ax.EndInit();