unity3d 用js好 还是c#好

JavaScript011

unity3d 用js好 还是c#好,第1张

c#特点是严谨、安全、容易调试、容易读、原生面向对象也很强大,而且非常容易学。要写的代码越多,c#的优势就越明显,调试不累、维护不累、更新不累。问题是,互联网支持的是js,不支持c#。而桌面端的大型游戏引擎,竞争激烈,极度追求性能,所以基本只支持c++,也不支持c#。也就是说,除了unity3d,c#在游戏界根本吃不开。所以,虽然c#语言本身很优秀,但还不如学js,起码在网页游戏引擎和ios游戏引擎上通用。但其实用c#做世界一流的游戏完全没有任何问题,著名的游戏magicka(魔法对抗/魔能)就是c#写的。可惜几个很牛的游戏引擎绝对不可能去支持c#,导致c#的地位永远都会很尴尬。不过本人经历过类似js这些语言在调试、找bug和维护时的巨大痛苦,整个过程纯属浪费生命,因此对不严谨的脚本语言恨之入骨,所以还是选择c#

在c#中一般会封装成dll文件对外提供接口调用,unity的js脚本也是这样的调用方式。

一、创建dll文件

1。打开vs文件->新建->项目->C#->类库,输入项目的名称,创建一个dll项目

2。引入 UnityEngine UnityEditor 这两个文件放在unity安装目录的Unity\Editor\Data\Managed路径下,

具体添加步骤:右键点击解决方案->添加引用->浏览

3。如果加入了UnityEngine UnityEditor,在项目中就可以using UnityEngine 和 UnityEditor;如果项目中不需要,也可以省略第二步

举例说明:

using System

using System.Collections.Generic

using System.Linq

using System.Text

using UnityEngine

using UnityEditor

using System.Collections

namespace dlltest

{

class Class2 : MonoBehaviour

{

void Start()

{

Debug.Log("this is unity call C# dll test!")

}

}

}

5。F5启动生成解决方案(debug或者release),把生成的dll放到unity工程的asset下;

6。如果继承了Monobehaviour的类在dll的子对象中有显示,这样就可以绑定到GameObject上了,如果是要引用dll的类,需要using 命名空间,名字一般和项目名称一致才能调用。

首先需要跟大家说明的一点是,JS脚本必须放在"StandardAssets"、 "Pro StandardAssets“和

"Plugins"这三个目录中的哪个都可以,原因是,这三个目录里的脚本被最先编译,"Editor"目录里的稍后编译,其他的脚本最后编译。如果在一

个目录下则CS文件无法读取JS里的方法,也就无法编译通过了。而JS调用CS方法则无此限制。

其次是,当你在CS脚本中获取JS脚本的时候,你写JS脚本名字的时候可能是不能被识别的(报红),不要害怕 - -,大胆的写下去吧,运行时是不会报错的

不要看到他红了就以为不能运行了,其实有的电脑是没有加载这个程序集,所以才这样的,想说的就这么多,大家顺利的调用JS吧~

JsScript.js

[csharp] view plain copy

function 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")

}

Csharp.cs

[csharp] view plain copy

using 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")

}

}