查看: 1237|回复: 3

[脚本] Unity3D中js与C#之间相互调用的解决办法

[复制链接]

27

主题

14

听众

507

积分

大学生

Rank: 3Rank: 3

升级   0.47%

发表于 2013-3-21 12:13 |显示全部楼层
共享资源获取更多积分!share your resources get more credits!
本帖最后由 fjkrl 于 2013-3-21 12:15 编辑

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.js

  1. function OnGUI()

  2. {

  3. if(GUI.Button(Rect(25,25,100,30),"JS Call CS" ))

  4. {

  5. var c = gameObject.GetComponent("test2");

  6. c.PrintTest();

  7. }

  8. }

  9. function testPrint()

  10. {

  11. print("CS Call JS");

  12. }
复制代码
test2.cs
  1. using UnityEngine;

  2. using System.Collections;

  3. public class test2: MonoBehaviour {

  4. void OnGUI()

  5. {

  6. if(GUI.Button(new Rect(25,70,100,30), "CS Call JS"))

  7. {

  8. test1 c = (test1)gameObject.GetComponent("test1");

  9. c.testPrint();

  10. }

  11. }

  12. void PrintTest()

  13. {

  14. print("JS Call CS");

  15. }

  16. }
这里必须要注意的是JS文件必须是在 "Standard Assets"、 "Pro Standard Assets" 和 "Plugins" 这三个目录中的任何一个里,而CS文件不能与JS文件在一个目录中。原因是,这三个目录里的脚本被最先编译,"Editor"目录里的稍后编译,其他的脚本最后编译。目前Unity3D的2.5的版本似乎不支持C# 3.0,所以无法用var的关键字,这样就只支持强类型,所以如果在一个目录下则CS文件无法读取JS里的方法,也就无法编译通过了。而JS调用CS方法则无此限制。

27

主题

14

听众

507

积分

大学生

Rank: 3Rank: 3

升级   0.47%

发表于 2013-3-21 12:24 |显示全部楼层
一定要看看
回复

使用道具 举报

0

主题

6

听众

52

积分

问题学生

Rank: 1

升级   26%

发表于 2013-6-17 19:55 |显示全部楼层
支持,顶一下
回复

使用道具 举报

0

主题

6

听众

354

积分

小学生

Rank: 2

升级   51.33%

发表于 2014-4-26 10:25 |显示全部楼层
好好 学习了
回复

使用道具 举报

0

主题

6

听众

205

积分

小学生

Rank: 2

升级   1.67%

发表于 2017-4-1 11:31 |显示全部楼层
很不错
回复

使用道具 举报

0

主题

6

听众

201

积分

小学生

Rank: 2

升级   0.33%

发表于 2017-4-1 11:38 |显示全部楼层
真心顶
回复

使用道具 举报

0

主题

6

听众

201

积分

小学生

Rank: 2

升级   0.33%

发表于 2017-4-1 11:23 |显示全部楼层
难得一见的好帖
回复

使用道具 举报

0

主题

6

听众

201

积分

小学生

Rank: 2

升级   0.33%

发表于 2017-4-1 11:33 |显示全部楼层
说的非常好
回复

使用道具 举报

1

主题

7

听众

202

积分

小学生

Rank: 2

升级   0.67%

发表于 2017-4-1 11:02 |显示全部楼层
LZ真是人才
回复

使用道具 举报

0

主题

6

听众

202

积分

小学生

Rank: 2

升级   0.67%

发表于 2017-5-13 08:17 |显示全部楼层
顶顶多好
回复

使用道具 举报

温馨提示:求助请到“Unity技术讨论”版块中发帖,便于集中解决!
您需要登录后才可以回帖 登录 | 立即注册

懒人模式:

关闭

站长推荐 上一条 /1 下一条

Unity3D游戏开发联盟(资源共享平台) -Unity3D,Unreal ( 苏ICP备12051100号 )   

GMT+8, 2017-9-25 14:09 , Processed in 0.121337 second(s), 42 queries .