国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

winform 封裝unity web player 用戶控件

這篇具有很好參考價(jià)值的文章主要介紹了winform 封裝unity web player 用戶控件。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

環(huán)境:

  • VS2015
  • Unity 5.3.6f1 (64-bit)

目的:

Unity官方提供的UnityWebPlayer控件在嵌入Winform時(shí)要求讀取的.unity3d文件路徑(Src)必須是絕對(duì)路徑,如果移動(dòng)代碼到另一臺(tái)電腦,需要重新修改src。于是考慮使用winform用戶控件來進(jìn)行封裝,以實(shí)現(xiàn)讀取存放在工程文件夾下的.unity3d文件的效果。

參考:

  • WinForm內(nèi)嵌Unity3D_winform嵌入unity3d并交互__學(xué)而時(shí)習(xí)之_的博客-CSDN博客

  • https://www.cnblogs.com/xieyulin/p/7050618.html

過程

首先新建windows用戶窗體庫。

winform 封裝unity web player 用戶控件,unity,前端,游戲引擎


然后在空白控件上添加UnityWebPlayer,這一步是為了添加Interop.UnityWebPlayerAXLib.dll、AxInterop.UnityWebPlayerAXLib.dll兩個(gè)引用。

winform 封裝unity web player 用戶控件,unity,前端,游戲引擎


當(dāng)引用列表里出現(xiàn)這兩個(gè)引用時(shí),把剛才添加的UnityWebPlayer控件刪除。

winform 封裝unity web player 用戶控件,unity,前端,游戲引擎


然后修改控件的.cs文件,代碼如下

//U3DPlayer.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace UnityPlayer
{
    public partial class U3Dplayer: UserControl
    {
       
        #region 自定義事件
        //委托
        public delegate void ExternalCallHandler(object sender, AxUnityWebPlayerAXLib._DUnityWebPlayerAXEvents_OnExternalCallEvent e);
        /// <summary>
        /// 接收Unity調(diào)用宿主函數(shù)的消息
        /// </summary>
        [Browsable(true), Description("接收Unity調(diào)用宿主(如WinForm)函數(shù)的消息")]
        public event ExternalCallHandler UnityCall;
        //方法
        public void OnUnityCall(object sender, AxUnityWebPlayerAXLib._DUnityWebPlayerAXEvents_OnExternalCallEvent e)
        {
            if (UnityCall != null)
            {
                UnityCall(sender, e);
            }
        }
        #endregion

        #region 內(nèi)部變量
        private AxUnityWebPlayerAXLib.AxUnityWebPlayer _axUnityWebPlayer = null;
        #endregion

        /// <summary>
        /// 用戶控件函數(shù)
        /// </summary>
        public U3Dplayer()
        {
            InitializeComponent();

            string src = Application.StartupPath + "\\unity.unity3d";//在這里設(shè)置路徑

            _axUnityWebPlayer = CreateUnity(this, src);
            OnExternalCallCheck();
            this.Controls.Add(_axUnityWebPlayer);//在原控件上添加UnityWebPlayer控件
        }

        /// <summary>
        /// 建立一個(gè)新的unity控件并設(shè)置一些屬性
        /// </summary>
        /// <param name="form"></param>
        /// <param name="src"></param>
        /// <returns></returns>
        public static AxUnityWebPlayerAXLib.AxUnityWebPlayer CreateUnity(Control form, string src)
        {
            var unity = new AxUnityWebPlayerAXLib.AxUnityWebPlayer();
            ((System.ComponentModel.ISupportInitialize)(unity)).BeginInit();
            form.Controls.Add(unity);
            ((System.ComponentModel.ISupportInitialize)(unity)).EndInit();
            unity.src = src;
            AxHost.State state = unity.OcxState;//最關(guān)鍵的是OcxState,必須使用AxUnityWebPlayer才能依據(jù)Src動(dòng)態(tài)產(chǎn)生。
            unity.Dispose();
            unity = new AxUnityWebPlayerAXLib.AxUnityWebPlayer();
            ((System.ComponentModel.ISupportInitialize)(unity)).BeginInit();
            form.SuspendLayout();
            unity.Dock = DockStyle.Fill;
            //unity.Size = new System.Drawing.Size(720, 450);
            unity.Name = "Unity";
            unity.OcxState = state;
            unity.TabIndex = 0;
            //unity.Location = new System.Drawing.Point(0, 0);
            ((System.ComponentModel.ISupportInitialize)(unity)).EndInit();
            form.ResumeLayout(false);
            return unity;
        }

        private void OnExternalCallCheck()
        {
            if (_axUnityWebPlayer == null)
            {
                throw new Exception("_axUnityWebPlayer init fail");
            }
            else
            {
                _axUnityWebPlayer.OnExternalCall += _axUnityWebPlayer_OnExternalCall;
            }
        }

        void _axUnityWebPlayer_OnExternalCall(object sender, AxUnityWebPlayerAXLib._DUnityWebPlayerAXEvents_OnExternalCallEvent e)
        {
            if (e.value.StartsWith("LOAD_COMPLETE"))
            {
                if (!_axUnityWebPlayer.Visible)
                {
                    _axUnityWebPlayer.Width = this.Width;
                    _axUnityWebPlayer.Height = this.Height;
                    _axUnityWebPlayer.Show();
                }
            }
            OnUnityCall(sender, e);
        }
      

        #region SendMessage
        /// <summary>
        /// 發(fā)送消息給Unity
        /// </summary>
        /// <param name="unityObjName">Unity中的對(duì)象名稱</param>
        /// <param name="unityScriptyMethod">Unity腳本中的方法</param>
        /// <param name="val">傳送的值.僅限于int、float、string</param>
        public void SendMessage(string unityObjName, string unityScriptyMethod, object val)
        {
            if (_axUnityWebPlayer == null)
            {
                return;
            }
            _axUnityWebPlayer.SendMessage(unityObjName, unityScriptyMethod, val);
        }
        #endregion
    }
}

然后選擇生成動(dòng)態(tài)鏈接庫。

winform 封裝unity web player 用戶控件,unity,前端,游戲引擎


在Winform工程中選擇“工具”–“選擇工具箱項(xiàng)”–導(dǎo)入,即可使用

winform 封裝unity web player 用戶控件,unity,前端,游戲引擎

winform 封裝unity web player 用戶控件,unity,前端,游戲引擎

轉(zhuǎn) :Winform基于UnityWebplayer封裝用戶控件以實(shí)現(xiàn).unity3d文件相對(duì)路徑(動(dòng)態(tài)src) - 灰信網(wǎng)(軟件開發(fā)博客聚合)文章來源地址http://www.zghlxwxcb.cn/news/detail-657797.html

到了這里,關(guān)于winform 封裝unity web player 用戶控件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Unity之IMGUI腳本封裝】—編譯模式下控件可視化及其封裝

    【Unity之IMGUI腳本封裝】—編譯模式下控件可視化及其封裝

    ?????個(gè)人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點(diǎn)贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 :UnityUI篇實(shí)戰(zhàn) 缺點(diǎn)1:無法在編譯過程進(jìn)行可視化調(diào)整 缺點(diǎn)2:無法分辨率自適應(yīng) 此圖可忽略 UML類圖 性能優(yōu)化代碼 完整代碼: 按鈕封裝代

    2024年02月15日
    瀏覽(24)
  • 【Unity之IMGUI腳本封裝】—自定義常用控件的封裝(即拿即用)

    【Unity之IMGUI腳本封裝】—自定義常用控件的封裝(即拿即用)

    ?????個(gè)人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點(diǎn)贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 :UnityUI篇實(shí)戰(zhàn) UML類圖 封裝代碼: 按鈕封裝代碼 封裝代碼 UML類圖 封裝代碼 封裝代碼 封裝代碼 GUI.DrawTextrrue 沒有自定義樣式的重載 封裝代

    2024年02月16日
    瀏覽(44)
  • Unity 轉(zhuǎn)微信小游戲Error building Player: Incompatible color space with graphics API

    Unity 轉(zhuǎn)微信小游戲Error building Player: Incompatible color space with graphics API

    Unity 開發(fā) 微信小游戲,進(jìn)行轉(zhuǎn)換小游戲時(shí)報(bào)Error building Player: Incompatible color space with graphics AP錯(cuò)誤,主要原因是不兼容WEBGL2.0。 需要在 Unity Editor中File-Build settings-Player Settings中設(shè)置Color space為Gamma。默認(rèn)值是Linear這需要WebGL2.0支持。 勾選選項(xiàng)WebGL2.0(Beta)選項(xiàng)。也可解決上述問題

    2024年02月14日
    瀏覽(25)
  • 【Unity之IMGUI腳本封裝】—位置信息類和控件基類的封裝

    【Unity之IMGUI腳本封裝】—位置信息類和控件基類的封裝

    ?????個(gè)人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點(diǎn)贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 : 缺點(diǎn)1:無法在編譯過程進(jìn)行可視化調(diào)整 缺點(diǎn)2:無法分辨率自適應(yīng) 作用:讓控件根據(jù)調(diào)整對(duì)齊 最終代碼 特點(diǎn): 類是抽象類:原因基類

    2024年02月17日
    瀏覽(21)
  • 【Unity之IMGUI】—自定義常用控件的封裝(即拿即用)

    【Unity之IMGUI】—自定義常用控件的封裝(即拿即用)

    ?????個(gè)人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點(diǎn)贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 :UnityUI篇實(shí)戰(zhàn) UML類圖 封裝代碼: 按鈕封裝代碼 封裝代碼 UML類圖 封裝代碼 封裝代碼 封裝代碼 GUI.DrawTextrrue 沒有自定義樣式的重載 封裝代

    2024年02月11日
    瀏覽(17)
  • 【Unity之IMGUI】—編譯模式下控件可視化及其封裝

    【Unity之IMGUI】—編譯模式下控件可視化及其封裝

    ?????個(gè)人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點(diǎn)贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 :UnityUI篇實(shí)戰(zhàn) 缺點(diǎn)1:無法在編譯過程進(jìn)行可視化調(diào)整 缺點(diǎn)2:無法分辨率自適應(yīng) 此圖可忽略 UML類圖 性能優(yōu)化代碼 完整代碼: 按鈕封裝代

    2024年02月10日
    瀏覽(26)
  • 【Unity之IMGUI】—位置信息類和控件基類的封裝

    【Unity之IMGUI】—位置信息類和控件基類的封裝

    ?????個(gè)人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點(diǎn)贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 : 缺點(diǎn)1:無法在編譯過程進(jìn)行可視化調(diào)整 缺點(diǎn)2:無法分辨率自適應(yīng) 作用:讓控件根據(jù)調(diào)整對(duì)齊 最終代碼 特點(diǎn): 類是抽象類:原因基類

    2024年02月12日
    瀏覽(26)
  • 【unity之IMGUI實(shí)踐】游戲結(jié)束流程封裝實(shí)現(xiàn)【七】

    【unity之IMGUI實(shí)踐】游戲結(jié)束流程封裝實(shí)現(xiàn)【七】

    ?????個(gè)人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點(diǎn)贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 : unityUI專題篇 ??? ??????:步驟實(shí)現(xiàn) 1.坐標(biāo)三個(gè)轉(zhuǎn)化 2.GUI的原點(diǎn)和屏幕的原點(diǎn) 3.結(jié)構(gòu)體的特點(diǎn)回顧——涉及Rect_結(jié)構(gòu)體類型 4.血條的

    2024年02月14日
    瀏覽(25)
  • 【Unity3D游戲魔坦之爭(zhēng)】游戲結(jié)束流程封裝實(shí)現(xiàn)【七】

    【Unity3D游戲魔坦之爭(zhēng)】游戲結(jié)束流程封裝實(shí)現(xiàn)【七】

    ?????個(gè)人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點(diǎn)贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 : unityUI專題篇 ??? ??????:步驟實(shí)現(xiàn) 1.坐標(biāo)三個(gè)轉(zhuǎn)化 2.GUI的原點(diǎn)和屏幕的原點(diǎn) 3.結(jié)構(gòu)體的特點(diǎn)回顧——涉及Rect_結(jié)構(gòu)體類型 4.血條的

    2024年02月11日
    瀏覽(52)
  • 【Unity3D游戲魔坦之爭(zhēng)】敵方邏輯封裝實(shí)現(xiàn)【六】

    【Unity3D游戲魔坦之爭(zhēng)】敵方邏輯封裝實(shí)現(xiàn)【六】

    ?????個(gè)人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點(diǎn)贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 : unityUI專題篇 ??? ??????:步驟實(shí)現(xiàn) 1.炮臺(tái)的行為邏輯封裝:旋轉(zhuǎn),觸發(fā)檢測(cè),發(fā)射炮彈及特效 2.檢測(cè)玩家后自動(dòng)瞄準(zhǔn)攻擊 3.玩家扣

    2024年02月11日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包