Unity3D中js与C#之间相互调用的解决办法
2016-01-12 18:21
671 查看
Unity3D中一些脚本的方法只能用在JS中,在C#中是无效的,而C#可以与服务器端通讯,JS本身却不行。而且,如果需要用到js调用c#的问题,js会比c#先编译,所以在mac里编译ios的时候会出错,提示为无法找到那个C#类。所以势必会遇到这两种语言脚本中方法的互相调用。解决方法:1.首先在你的Unity3D程序里建一个Plugins的文件夹,注意必须是这个名字!2.将要调用的C#类里的系统命名空间去掉,只保留必须要用的命名空间,类名后面的父类也去掉,将里面的方法设为静态的方法。3.将这个C#类方法Plugins文件夹下。4.在js里就可以直接引用了,如:test.test();实例:两个文件 test1.js 和 test2.cs。test1.jsfunction OnGUI(){if(GUI.Button(Rect(25,25,100,30),"JS Call CS" )){var c = gameObject.GetComponent("test2");c.PrintTest();}}function testPrint(){print("CS Call JS");}test2.csusing UnityEngine;using System.Collections;public class test2: MonoBehaviour {void OnGUI(){if(GUI.Button(new Rect(25,70,100,30), "CS Call JS")){test1 c = (test1)gameObject.GetComponent("test1");c.testPrint();}}void PrintTest(){print("JS Call CS");}}这里必须要注意的是JS文件必须是在 "Standard Assets"、 "Pro Standard Assets" 和 "Plugins" 这三个目录中的任何一个里,而CS文件不能与JS文件在一个目录中。原因是,这三个目录里的脚本被最先编译,"Editor"目录里的稍后编译,其他的脚本最后编译。目前Unity3D的2.5的版本似乎不支持C# 3.0,所以无法用var的关键字,这样就只支持强类型,所以如果在一个目录下则CS文件无法读取JS里的方法,也就无法编译通过了。而JS调用CS方法则无此限制。
相关文章推荐
- 1.unity3d中的坐标系
- unity3d 5.x networking
- unity3d中的欧拉角
- Unity资源管理汇总
- Unity3D中的Coroutine详解
- unity3d热更新插件uLua学习整理
- Unity3d 开发(六) 5.x AssetBundle使用
- Unity3D入门
- OpenCV Configuration on Visual Studio 2015 Community
- (转)续上文,Unity3D面试ABC
- Unity3D安卓打包参数配置与兼容性的关系分析
- 解决Animation 添加AnimationClip 无效的问题
- unity3d 技能编辑器
- unity UGUI 事件接口
- 关于unity中的update、Lateupdate和FixedUpdate
- Unity Shader.Find 找不到内置shader
- unity3d远程加载资源模型到本地并加载(一)打包资源
- Unity Shader中顶点坐标的大小似乎会受到Draw Call合批的影响
- Unity3d导出Recast geomset.txt
- Unity3d导出Recast geomset.txt