都说unity3d的脚本是用c#写的。。

都说unity3d的脚本是用c#写的。。都说unity3d的脚本是用c#写的,结果我看了一下所谓的用c#写的脚本代码,结果发现和c#一点关系都没有,那些什么语法或者函数根本就不是c#里面的。有也只有一点而已。。。。

u3d支持c#和js两种脚本,而且c#是最普遍的,咱们看unity用的编译器,是c#的跨平台开源编译器mono,而且是unity更改过得mono,这个编译器是基于c#.net2.0的语法的,但是由于unity的更改,使得它也支持了一些.net3.5的语法,比如匿名函数lambda表达式(挺方便的),yield return迭代器(和标准c#有出入)。
总之这个c#是unity改过的,用来专门写unity游戏脚本脚本的语言,可以调用.net的部分基础类库和unity自己的类库,被微软的真c#完全兼容,但不完全兼容真c#,可以说是真c#的一个子集。
手机打字不易,望采纳。追问

为什么很多我看很多unity脚本里的函数c#里根本没有?

比如说transform.translate这个和c#有关系吗?

追答

你还是学编程不够深入。c#是一门语言,严格意义上来讲c#只包括它的语法(变量定义,各种语句(循环条件等)),而外部的类库,不论是微软的类库比如Console.WriteLine还是unity的transform.translate,都不是c#的内容。这些都是被定义在外部的dll里的,比如console定义在system.dll里(在.net framework的安装目录下),而transform定义在unity.dll里(路径记不清了,你可以找找)。只要引用了这个dll,不论是微软的c#还是unity的,都可以调用transform里的东西。另外u3d的底层都是c和c++写的,包括transform.translate甚至微软的底层,c#脚本只不过是拿来用的
所以说,unity的c#完全是c#,transform.translate虽然不是c#写的,但引用它所在的dll,和调用这个函数,确实是c#提供的功能,这个没什么问题。所以,unity的函数底层实现不是c#写的,但是是给c#用的,而且其他语言也能用比如js,c语言,c++甚至java都能去调用,但你不能说调用了别的语言写的dll类库就说不是这个语言的代码了。

追问

那是不是就算是对c#比较熟练的人学unity3d和不熟悉c#的人学unity3d。那个比较熟悉的人是不是也占不了多少好处?

都说unity3d的脚本可以用c#写,那么那个所谓的用c#写的脚本到底用了c#的什么东西呢?

肯定是用了c#的某些东西才说是用c#写的脚本啊。不然的话为什么不说用c,c++或者Java写的脚?

追答

1.c#的语法和其他预言的语法不一样,例如c++的指针,c#就没有,c#switch可以是一个字符串,java就不行,c#集成类用的:这个冒号,java就不是,c可以多继承,c#就不行
2.unity的脚本用了c#的语法明白吗,语法!;语法是定义一门语言的基础,(只要有语法就是语言了),unity也支持一部分c#.net的类库,但是.net类库真的不属于c#的一部分
用的c#的语法!明白吗!你确实是菜鸟,因为你现在没有搞懂什么是一门编程语言,什么是c#,你先搞懂这个在问问题吧。你首先要真正明白什么是c#好吧。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-15
用c#语言封装的自己的类库。哪怕是cocos或者虚幻4也是一样。他们更多的用的这种语言的特性。
相似回答