Unity3D 场景与C# Control进行结合
生活随笔
收集整理的這篇文章主要介紹了
Unity3D 场景与C# Control进行结合
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?楊航最近在自學(xué)Unity3D,打算使用這個(gè)時(shí)髦、流行、強(qiáng)大的游戲引擎開(kāi)發(fā)一個(gè)三維業(yè)務(wù)展示系統(tǒng),不過(guò)發(fā)現(xiàn)游戲的UI和業(yè)務(wù)系統(tǒng)的UI還是有一定的差別,很多的用戶還是比較習(xí)慣WinForm或者WPF中的UI形式,于是在網(wǎng)上搜了一下WinForm和Unity3D如何集成,結(jié)果不是非常令人滿意,絕大多數(shù)的回答是“No?Way”,也有人給出了使用WebBrowser控件的形式,說(shuō)實(shí)話這種還算是比較靠譜的,以前也這么干過(guò)類似的事情;后來(lái)搜到一篇帖子說(shuō)是可以使用U3D?WebPlayer控件,抱著試試看的想法,新建了一個(gè)winform應(yīng)用,在工具箱里面還真找到了UnityWebPlayer?Control這么一個(gè)控件:?
???????????
??????????
?????????
?????????
?????????
??????????
??????????
?????????
???????????將它拖到form上以后,發(fā)現(xiàn)屬性很少,大部分都是Control的屬性,不過(guò)還是發(fā)現(xiàn)了一個(gè)很重要的屬性:src,這里將發(fā)布的web包地址寫(xiě)進(jìn)去,運(yùn)行一下,奇跡出現(xiàn)了,竟然出現(xiàn)了三維場(chǎng)景界面。。。
??????????
??????????
??????????
??????????
???????????
???????????
??????????
????????????請(qǐng)忽略三維場(chǎng)景內(nèi)容,實(shí)在是拿不出手哇
???????????
???????????
???????????這里留一個(gè)問(wèn)題:.unity3d?文件的路徑只能在設(shè)計(jì)時(shí)的屬性窗口直接賦值,在Form的構(gòu)造函數(shù)或者Load事件中賦值都沒(méi)有效果,具體原因還沒(méi)找到。
??????????
??????????這樣的話算是實(shí)現(xiàn)了之前的需求:將U3D和Winform結(jié)合,不過(guò)winform的控件如何和U3D進(jìn)行交互呢?再看一下UnityWebPlayerClass類的定義,發(fā)現(xiàn)有一個(gè)SendMessage方法,和U3D自身腳本的SendMessage定義一樣。?
?????????
??????????
??????????
??????????下面首先在U3D中創(chuàng)建一個(gè)C#腳本,添加一個(gè)非常簡(jiǎn)單的函數(shù):?
??????????void?Down()
?????????{
????????????transform.Translate(?Vector3.down?*?Time.deltaTime?);
?????????}?
????????? 將腳本拖到叫做Sphere的對(duì)象上面。然后在窗體上添加一個(gè)按鈕,在按鈕的click事件中調(diào)用上面定義的方法:?
??????????axUnityWebPlayer1.SendMessage(?"Sphere",?"Down",?null?); 再次運(yùn)行,不停地點(diǎn)擊按鈕,就可以看到小球緩慢往下移動(dòng)的效果了。
??????????
???????????
????????????
????????? 經(jīng)過(guò)上面的嘗試,總算是初步解決了U3D和Winform(WPF也類似)集成的問(wèn)題,不過(guò)核心的對(duì)象控制代碼還是得在U3D中寫(xiě)好、編譯才行,winform只是提供了一個(gè)更為習(xí)慣的UI而已。不知道是否還有更好、更方便、更強(qiáng)大的方法,期待。。。?
???????????
??????????
?????????
?????????
?????????
??????????
??????????
?????????
???????????將它拖到form上以后,發(fā)現(xiàn)屬性很少,大部分都是Control的屬性,不過(guò)還是發(fā)現(xiàn)了一個(gè)很重要的屬性:src,這里將發(fā)布的web包地址寫(xiě)進(jìn)去,運(yùn)行一下,奇跡出現(xiàn)了,竟然出現(xiàn)了三維場(chǎng)景界面。。。
??????????
??????????
??????????
??????????
???????????
???????????
??????????
????????????請(qǐng)忽略三維場(chǎng)景內(nèi)容,實(shí)在是拿不出手哇
???????????
???????????
???????????這里留一個(gè)問(wèn)題:.unity3d?文件的路徑只能在設(shè)計(jì)時(shí)的屬性窗口直接賦值,在Form的構(gòu)造函數(shù)或者Load事件中賦值都沒(méi)有效果,具體原因還沒(méi)找到。
??????????
??????????這樣的話算是實(shí)現(xiàn)了之前的需求:將U3D和Winform結(jié)合,不過(guò)winform的控件如何和U3D進(jìn)行交互呢?再看一下UnityWebPlayerClass類的定義,發(fā)現(xiàn)有一個(gè)SendMessage方法,和U3D自身腳本的SendMessage定義一樣。?
?????????
??????????
??????????
??????????下面首先在U3D中創(chuàng)建一個(gè)C#腳本,添加一個(gè)非常簡(jiǎn)單的函數(shù):?
??????????void?Down()
?????????{
????????????transform.Translate(?Vector3.down?*?Time.deltaTime?);
?????????}?
????????? 將腳本拖到叫做Sphere的對(duì)象上面。然后在窗體上添加一個(gè)按鈕,在按鈕的click事件中調(diào)用上面定義的方法:?
??????????axUnityWebPlayer1.SendMessage(?"Sphere",?"Down",?null?); 再次運(yùn)行,不停地點(diǎn)擊按鈕,就可以看到小球緩慢往下移動(dòng)的效果了。
??????????
???????????
????????????
????????? 經(jīng)過(guò)上面的嘗試,總算是初步解決了U3D和Winform(WPF也類似)集成的問(wèn)題,不過(guò)核心的對(duì)象控制代碼還是得在U3D中寫(xiě)好、編譯才行,winform只是提供了一個(gè)更為習(xí)慣的UI而已。不知道是否還有更好、更方便、更強(qiáng)大的方法,期待。。。?
總結(jié)
以上是生活随笔為你收集整理的Unity3D 场景与C# Control进行结合的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一个透明的shader
- 下一篇: C#制作、打包、签名、发布Activex