内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

JSBinding跟SharpKit或JavaScript的加載流程是怎樣的

JS Binding跟SharpKit或JavaScript的加載流程是怎樣的,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)公司專注于振安網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供振安營銷型網(wǎng)站建設,振安網(wǎng)站制作、振安網(wǎng)頁設計、振安網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務,打造振安網(wǎng)絡公司原創(chuàng)品牌,更為您提供振安網(wǎng)站排名全網(wǎng)營銷落地服務。

首先,現(xiàn)在的方案是游戲啟動就加載全部的 JavaScript 代碼。

先看下 StreamingAssets/JavaScript/ 文件夾下的目錄結(jié)構:

JS Binding跟SharpKit或JavaScript的加載流程是怎樣的

  • debug/:跟 JavaScript 調(diào)試有關的 JavaScript 代碼,只有當開啟調(diào)試的時候才需要加載。

  • Manual/:也是用于手寫 JavaScript 代碼,跟 JSImp/ 有一些區(qū)別。Manual 里最有的代表性的是 Vector2 和 Vector3,這2個對象是手寫實現(xiàn)的,在 JavaScript 中跑只會使用 JavaScript 版本的 Vector2 和 Vector3

  • SharpKit/:從 SharpKit 拿過來的一些 JavaScript 庫文件??梢詫崿F(xiàn)類繼承等

  • GeneratedFiles.javascript:是由菜單 【JSB | Generate JS and CS Bindings】 產(chǎn)生的。用于實現(xiàn)將 C# 函數(shù)綁定到 JavaScript 上。比如說要在 JavaScript 中使用 GameObject 就要使用這里面的文件。這一點和 LUA 不一樣,LUA 產(chǎn)生綁定時只有產(chǎn)生 C# 代碼,我們是2邊都有。

  • SharpKitGeneratedFiles.javascript:由 SharpKit 工程編譯而來的 JavaScript 代碼都會放在這個文件里。

  • includes.javascript:JavaScript 代碼總?cè)肟?/p>

目前 JavaScript 加載只有一個入口,StreamingAsset/JavaScript/includes.javascript。

查看 _JSEngine.prefab 上的配置:

JS Binding跟SharpKit或JavaScript的加載流程是怎樣的

includes.javascript 里面通過 CS.require 包含了所有的 JavaScript 文件:

(此內(nèi)容可能不是最新的)

1 /*
 2 * Author: Qiucw
 3 * DO NOT change order
 4 */
 5 
 6 
 7 // -1)
 8 //--------------------------------------------------
 9 function jsb_ReplaceOrPushJsType(jst) {
10     //if (!JsTypes) { JsTypes = []; }
11     var found = false;
12     for (var i = 0; i < JsTypes.length; i++) {
13         if (JsTypes[i].fullname == jst.fullname) {
14             JsTypes[i] = jst;
15             found = true;
16             break;
17         }
18     }
19     if (!found) {
20         JsTypes.push(jst);
21     }
22 }
23 
24 
25 // 0) SharpKit library
26 //--------------------------------------------------
27 CS.require("SharpKit/jsclr");
28 CS.require("SharpKit/clrlibrary");
29 
30 // 1) Files generated by JSBinding
31 // may overwrite some classes in step 0)
32 //--------------------------------------------------
33 CS.require("GeneratedFiles");
34 
35 
36 // 2) Manually written js
37 // will overwrite some classes in step 1)
38 //--------------------------------------------------
39 CS.require("Manual/UnityEngine_Vector3");
40 CS.require("Manual/UnityEngine_Vector2");
41 CS.require("Manual/UnityEngine_MonoBehaviour");
42 CS.require("Manual/UnityEngine_WaitForSeconds");
43 CS.require("Manual/MissingClasses");
44 //
45 // may be more..
46 //
47 
48 // 3) code generated by SharpKit
49 //--------------------------------------------------
50 CS.require("SharpKitGeneratedFiles");
51 
52 
53 // 4) JavaScript implemented
54 // will overwrite some classes in step 1)
55 //--------------------------------------------------
56 CS.require("JSImp/Reflection");
57 CS.require("JSImp/Coroutine");
58 CS.require("JSImp/Iterator");
59 
60 //
61 // may be more..
62 //
63 
64 // 5) SharpKit handler (Compile)
65 //--------------------------------------------------
66 CS.require("SharpKit/myclrhandler");
67 
68 // 6) Error handler
69 //--------------------------------------------------
70 CS.require("ErrorHandler");

JavaScript 里的類一開始都是用 JsType 對象來表示,可以打開 StreamingAssets/JavaScript/SharpKitGeneratedFiles.javascript/ 查看一下。這里貼出來 V3Test 這個 MonoBehaviour 的 JavaScript 代碼:

1 if (typeof(JsTypes) == "undefined")
 2     var JsTypes = [];
 3 var V3Test = {
 4     fullname: "V3Test",
 5     baseTypeName: "UnityEngine.MonoBehaviour",
 6     assemblyName: "SharpKitProj",
 7     Kind: "Class",
 8     definition: {
 9         ctor: function (){
10             this.elapsed = 0;
11             UnityEngine.MonoBehaviour.ctor.call(this);
12         },
13         Start: function (){
14         },
15         Update: function (){
16             this.elapsed += UnityEngine.Time.get_deltaTime();
17             if (this.elapsed > 1){
18                 var sb = new System.Text.StringBuilder.ctor();
19                 this.elapsed = 0;
20                 var v = new UnityEngine.Vector3.ctor$$Single$$Single$$Single(2, 3, 6);
21                 var w = new UnityEngine.Vector3.ctor$$Single$$Single$$Single(7, 23, 1);
22                 var n = v.get_normalized();
23                 var arr = [n.x, n.y, n.z];
24                 UnityEngine.Debug.Log$$Object(sb.AppendFormat$$String$$Object$Array("v.normalized = ({0}, {1}, {2})", arr).toString());
25                 sb.Remove(0, sb.get_Length());
26                 var cross = UnityEngine.Vector3.Cross(v, w);
27                 arr = [cross.x, cross.y, cross.z];
28                 UnityEngine.Debug.Log$$Object(sb.AppendFormat$$String$$Object$Array("Cross(v, w) = ({0}, {1}, {2})", arr).toString());
29                 UnityEngine.Debug.Log$$Object("v.magnitude = " + v.get_magnitude());
30                 UnityEngine.Debug.Log$$Object("w.magnitude = " + w.get_magnitude());
31                 UnityEngine.Debug.Log$$Object("Dot(v, w) = " + UnityEngine.Vector3.Dot(v, w));
32                 UnityEngine.Debug.Log$$Object("Angle(v, w) = " + UnityEngine.Vector3.Angle(v, w));
33                 var proj = UnityEngine.Vector3.Project(v, w);
34                 UnityEngine.Debug.Log$$Object("Project(v,w) = " + proj.toString());
35                 v.Normalize();
36                 w.Normalize();
37                 UnityEngine.Debug.Log$$Object("normalized v = " + v.toString());
38                 UnityEngine.Debug.Log$$Object("normalized w = " + w.toString());
39             }
40         }
41     }
42 };
43 JsTypes.push(V3Test);

這個文件是由 SharpKit 工程生成的,并不是手寫的。

一個 JsType 用于定義一個類。里面的字段通常有:

  • fullname:表示此類的全名,也包含名字空間。V3Test 沒有名字空間,所以就沒有

  • baseTypeName:父類的名字。在后續(xù)的步驟中,會用于實現(xiàn)繼承。

  • Kind:通常是 "Class",表示這是一個類。也可以是 "Struct" 或 "Enum"

  • definition:表示實例函數(shù)以及實例的 Property,以及構造函數(shù)。ctor表示構造函數(shù)。V3Test 只有 Start 和 Update 2個函數(shù),是 MonoBehaviour 典型的2個函數(shù)。

  • staticDefinition:表示靜態(tài)函數(shù)。

  • fields:實例字段。

  • staticFields:靜態(tài)字段。

  • interfaceNames:接口的名字,是一個數(shù)組

可以看到,每一個類的文件,都是定義一個 JsType,文件最后把他 push 進 JsTypes 數(shù)組。

放到 JsTypes 數(shù)組干嘛呢?

includes.javascript 里有 require SharpKit/myclrhandler.javascript??梢源蜷_這個文件看一下。這個文件里最重要的一句代碼是:

1 Compile();

Compile 函數(shù)的定義是在 SharpKit/jsclr.javascript 中。有興趣的可以看一下源代碼。

Compile 主要做了2件事:

  1. 設置全局對象,使你可以訪問這些類。比如說 你可以使用 UnityEngine.GameObject 來訪問這個類。

  2. 處理繼承關系。比如說,V3Test并沒有定義 gameObject 這個屬性,但是在 V3Test 中是可以 this.gameObject 訪問的。

關于JS Binding跟SharpKit或JavaScript的加載流程是怎樣的問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關知識。

新聞標題:JSBinding跟SharpKit或JavaScript的加載流程是怎樣的
本文鏈接:http://m.rwnh.cn/article40/jcgeho.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網(wǎng)站內(nèi)鏈、移動網(wǎng)站建設微信公眾號、網(wǎng)站導航網(wǎng)頁設計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
临漳县| 临朐县| 昌宁县| 奉化市| 镇安县| 丘北县| 石阡县| 汝阳县| 新沂市| 邵阳市| 会昌县| 衢州市| 吉木萨尔县| 安福县| 邯郸市| 广德县| 嵊泗县| 新乡市| 名山县| 大化| 泰安市| 凯里市| 夏邑县| 安新县| 砀山县| 周宁县| 青龙| 河北区| 华蓥市| 富阳市| 新兴县| 句容市| 天峻县| 松溪县| 甘谷县| 中卫市| 米脂县| 陵水| 菏泽市| 剑阁县| 仁布县|