void InitJsEnv() { //调试端口:8080 jsEnv = new JsEnv(new JsLoader(), 8080); if (jsEnv == null) { Logger.LogError("InitJsEnv null!!!"); } //声明Action jsEnv.UsingAction <float>(); jsEnv.UsingAction <float, float>(); jsEnv.UsingAction <string, byte[]>(); jsEnv.UsingAction <Scene, LoadSceneMode>(); }
private void Run <Arg0Type, Arg1Type, Arg2Type>(Arg0Type arg0, Arg1Type arg1, Arg2Type arg2) { JsEnv jsEnv = new JsEnv(); jsEnv.UsingAction <Arg0Type, Arg1Type, Arg2Type>(); jsEnv.Eval("global.CS = require('csharp'); global.PUERTS = require('puerts');"); Action <Arg0Type, Arg1Type, Arg2Type> func = jsEnv.Eval <Action <Arg0Type, Arg1Type, Arg2Type> >("global.func = function (value) { }; global.func"); for (var i = 0; i < PuertsPerformanceUtil.warmUpRepeatCount; i++) { func.Invoke(arg0, arg1, arg2); } Measure .Method(() => { for (var i = 0; i < PuertsPerformanceUtil.repeatCount; i++) { func.Invoke(arg0, arg1, arg2); } }) .WarmupCount(PuertsPerformanceUtil.warmUpCount) .MeasurementCount(PuertsPerformanceUtil.SampleCount) .Run(); }
private void RunAndValidate <Arg0Type>(string validator, Arg0Type arg) { JsEnv jsEnv = new JsEnv(); jsEnv.UsingAction <Arg0Type>(); jsEnv.Eval("global.CS = require('csharp'); global.PUERTS = require('puerts');"); Action <Arg0Type> func = jsEnv.Eval <Action <Arg0Type> >("global.func = function (value) { }; global.func"); for (var i = 0; i < PuertsPerformanceUtil.warmUpRepeatCount; i++) { func.Invoke(arg); } Measure .Method(() => { for (var i = 0; i < PuertsPerformanceUtil.repeatCount; i++) { func.Invoke(arg); } }) .WarmupCount(PuertsPerformanceUtil.warmUpCount) .MeasurementCount(PuertsPerformanceUtil.SampleCount) .Run(); jsEnv.Eval(string.Format("global.func = function (value) {{ if (!({0})) throw new Error('validate failed'); }}", validator)); }
static void Watch() { env = new JsEnv(); env.UsingAction <int>(); bool result = env.Eval <bool>(@" global.CS = require('csharp'); process.on('uncaughtException', function(e) { console.error('uncaughtException', e) }); try { const moduleRequire = require('module').createRequire('" + Application.dataPath + @"/Examples/Editor/03_NodeTSCAndHotReload/js~/') moduleRequire('ts-node').register({ compilerOptions: { 'strict': false, 'strictNullChecks': false, 'strictPropertyInitialization': false, 'target': 'ES6', 'module': 'commonjs', 'sourceMap': true, 'moduleResolution': 'node', 'typeRoots': [ './node_modules/@types' ] } }) global.HotReloadWatcher = moduleRequire('./src/watch.ts').default const jsEnvs = CS.Puerts.JsEnv.jsEnvs console.log('jsEnvs.Count:' + jsEnvs.Count); for (let i = 0; i < jsEnvs.Count; i++) { const item = jsEnvs.get_Item(i); if (item && item.debugPort != -1) { HotReloadWatcher.addDebugger(item.debugPort) } } CS.NodeTSCAndHotReload.addDebugger = HotReloadWatcher.addDebugger.bind(HotReloadWatcher); CS.NodeTSCAndHotReload.removeDebugger = HotReloadWatcher.removeDebugger.bind(HotReloadWatcher); true; } catch(e) { console.error(e.stack); console.error('Some error triggered. Maybe you should run `npm i` in `js~` directory'); false; } "); if (!result) { UnWatch(); } else { UnityEngine.Debug.Log("watching tsproj"); } }
void Start() { if (jsEnv == null) { jsEnv = new JsEnv(); jsEnv.UsingAction <bool>();//toggle.onValueChanged用到 } var init = jsEnv.Eval <Action <MonoBehaviour> >("const m = require('UIEvent'); m.init;"); if (init != null) { init(this); } }
// Use this for initialization void Start() { jsEnv = new JsEnv(); //要使用值类型参数或者返回值的委托要声明,而Callback1因为是引用类型所以不用。 jsEnv.UsingAction <int>(); jsEnv.Eval(@" const CS = require('csharp'); let obj = new CS.PuertsTest.TestClass(); //如果你后续要remove,需要这样构建一个Delegate,后续可以用该Delegate引用去remove let delegate = new CS.PuertsTest.Callback1(o => o.Foo()); obj.AddEventCallback1(delegate); obj.AddEventCallback2(i => console.log(i)); //如果不需要remove,直接传函数即可 obj.Trigger(); obj.RemoveEventCallback1(delegate); obj.Trigger(); "); }
async Task InitJsEnv() { //预加载JS ,在JSEnv初始化前调用 await ResourceManager.PreloadJS(AddressableConfig.JSLable); //调试端口:8080 jsEnv = new JsEnv(new JsLoader(), 8080); jsEnv.ExecuteFile("puerts/flatbuffers.js"); if (jsEnv == null) { Logger.LogError("InitJsEnv null!!!"); } //声明Action: 值类型才需要这样添加 jsEnv.UsingAction <float>(); jsEnv.UsingAction <float, float>(); jsEnv.UsingAction <string, byte[]>(); jsEnv.UsingAction <Scene, LoadSceneMode>(); jsEnv.UsingAction <TChannel, int>(); jsEnv.UsingAction <int, GObject>(); }