Unity puerts js 和 c# 互相调用

1.js调用c#

[Configure]
public class ExamplesCfgujm
{
    
    
    [Binding]
    static IEnumerable<Type> Bindings
    {
    
    
        get
        {
    
    
            return new List<Type>()
            {
    
    
                typeof(UnityEngine.Debug),
                typeof(UnityEngine.Vector3),
                typeof(UnityEngine.SkinnedMeshRenderer),
                typeof(UnityEngine.GameObject),
                typeof(UnityEngine.Object),
                typeof(GameUtils)
            };
        }
    }
}

还记得Binding吗
在这里放入你的cs类
js那边就可以直接点出来调用啦

2.c#调用js

Main.jsEnv.UsingAction<int, int>();
var add = Main.jsEnv.Eval<Action<int, int>>(@"
const func1 = function(a,b) {
    console.log(a+b);
};
func1;
");
add(3, 11);

Main.jsEnv.UsingFunc<int, int>();
var Add3 = Main.jsEnv.Eval<Func<int, int>>(@"
const func2 = function(a) {
    return 3 + a;
};
func2;
");
UnityEngine.Debug.Log( Add3(1) );

如果是没有返回值的 就用UsingAction注册
有返回值就用UsingFunc
jsEnv.Eval 会返回最后一个表达式 ( 注意 eval里的代码不需要 return )
所以 js 相当于把自己的方法通过eval 传给了c#
然后c#调用了js里的方法
相当于绕了个弯

猜你喜欢

转载自blog.csdn.net/qq_38913715/article/details/128225309