大家周末好(苦逼的我还在搬砖,哈哈)。
最近接手了一个unity项目,工程里面是js和c#同时开发的(真想锤死这开发者),然后再后续的优化和功能开发中就遇到了js和c#之间调用的问题。
今天我就为大家好好的讲一下这个js和C#之间的调用及其相关注意事项:
首先,我们要明白一点:两种语言的编译顺序,如果我们要C#调用js,那我们肯定要让JS先编译,如果被调用的没有事先被编译,那不是null了?反之亦是如此。(谁先被调用,谁就先编译)。
接着,我们来说一下unity里面编译的顺序。在unity里面主要分为 Standard Assets、Pro Standard Assets、 Plugins和其他文件夹。其编译顺序也是先编译上面三个文件,然后再编译其他文件。
然后,我们来演示JS调用C#(这个时候需要C#先编译!创建一个js脚本,一个C#脚本)
如图:

C#脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestC : MonoBehaviour {
void Start()
{
}
/// <summary>
/// js将调用此方法 --参数由js脚本传入
/// </summary>
/// <param name="str"></param>
public void PrintCS(string str)
{
Debug.Log(str + ":C#方法被调用");
}
}
**js脚本:
**
#pragma strict
function Start ()
{
var cs1=gameObject.GetComponent("TestC");
(cs1 as TestC ).PrintCS("从js中调用 ");
}
其中值得注意的是js脚本创建某个类的对象时,一定要将对象强转为该类类型:

不然会出现如下报错:

最后C#调用JS也就很简单了,但是一定要记得脚本编译顺序。
(测试的时候记得在场景中挂载脚本哦,js和c#都要挂载)
好啦!今天就到这里啦,关于c#和js相互调用其实还有很多细节点,大家可以多参考参考相关文档和博客,后续有时间我也会继续分享更多开发技术和乐闻。
3480



被折叠的 条评论
为什么被折叠?



