登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> CLQ工作室开源代码 >> 主题: [u3d/js/jint/c#]u3d 2021 中加入 js 引擎     [回主站]     [分站链接]
标题
[u3d/js/jint/c#]u3d 2021 中加入 js 引擎
clq
浏览(299) + 2022-09-11 17:56:02 发表 编辑

关键字:

[2022-11-02 22:01:51 最后更新]
[u3d/js/jint/c#]u3d 2021 中加入 js 引擎

[u3d/js/jint/c#]u3d 2021 中加入 js 引擎

linux 下。其实引擎并没有太多的选择,纯 C# 目前似乎只能是 jint ,但它的 3.0 以后的版本用到了 .net9 。
这在 u3d 中差得比较远。所以要做下降级处理。

我们提供一下高速下载链接,打包好了原版和修改版。修改版本只改了语法兼容,所以很安全可用。
其实大家可以根据下面的说明自己改,我们放完整下载主要也是方便我们自己的新环境配置。



//----------------------------------------------------------------
//确实成功了 //但有两个要注意的问题:最新的 jint3 是不能运行在目前的 u3d .net Standard 2.1 环境的,我使用的是 jint-2.10.3
//同时要配合同一作者所使用的 esprima-dotnet-2.1.3 ,并且要修改一处代码,在代码 Scanner.cs 的 2157 行处
//另外 u3d 也不支持 namespace Esprima; 这样的语法,需要注释掉.例如在 Shims.cs 文件中的。
//据说这是从 .net8 开始的所谓 “接口默认实现”("从此以后,接口中定义的方法可以包含方法体了,即默认实现。")
//说一下我的环境:ubuntu 22.04 下的 Unity Hub 自带的 ue2021.3 。所以也许 windows 上的环境不需要做这种修改吧。
//https://www.cnblogs.com/shanfeng1000/p/14973804.html 处有个解释,比较啰嗦,不过可以大概理解一下。
//https://blog.csdn.net/sd7o95o/article/details/121448120 处有个更简洁的说明。
//jint-2.10.3 下载自 https://github.com/sebastienros/jint/tags?after=v3.0.0-beta-2032 不过有这个版本对应的文档吗?
/*
//internal record struct Range(int Start, int End);
//Range(int Start, int End); //clq for u3d //据说这是 .net 6 新语法
internal class Range{ //clq internal 这个修饰符不可少
public int Start;
public int End;

public Range(int Start, int End)
{
this.Start = Start;
this.End = End;
}
};
*/
Jint.Engine js = new Jint.Engine();
//js.SetValue("log", new Action(Console.WriteLine));
js.SetValue("log", new Action(UnityEngine.Debug.Log)); //确实给一个函数 //修改自 https://www.jb51.net/article/233715.htm 说是 3.0 的语法 2.10 也还是可以用的
js.Execute("var v1 = 123; log('Hello World'); ");

Jint.Native.JsValue value = js.GetValue("v1");
UnityEngine.Debug.Log(value);

//----------------------------------------------------------------

_u3d2021安装.

直接将 Jint 和 Esprima 目录下的文件复制到项目的 Assets 目录下就可以了,不用象 java 那样严格按包的导致建立多级
目录。
含有高速下载地址,但您没有文件高速下载权限。请先开通1元包年会员:
了解/开通会员
clq
2022-11-02 22:01:51 发表 编辑


今天在 windows 下也试了一下,代码写法略有差异。应该是 .net 版本造成的。

Jint.Engine js = new Jint.Engine();
        //js.SetValue("log", new Action(Console.WriteLine));
        //js.SetValue("log", new Action(UnityEngine.Debug.Log)); //确实给一个函数 //修改自 https://www.jb51.net/article/233715.htm 说是 3.0 的语法 2.10 也还是可以用的
        //js.SetValue("log", new System.Action(UnityEngine.Debug.Log));
        js.SetValue("log", new System.Action<object>(UnityEngine.Debug.Log));  //vs2019 下要这样写,上面那个是 linux 的写法
        js.Execute("var v1 = 123; log('Hello World'); ");




总数:1 页次:1/1 首页 尾页  
总数:1 页次:1/1 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1