标题
[u3d/js/jint/c#]u3d 2021 中加入 js 引擎
clq
浏览(546) +
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
含有高速下载地址,但您没有文件高速下载权限。请先开通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'); ");
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.