我从使用Unity3d的游戏开发开始,我可以看到有3种支持的语言用于创建脚本:C#,unityscript和Boo ......
虽然来自网页设计过去我很明显与javascript一起使用,但经过几次尝试后我发现Unity3d并不真正完全支持脚本语言和一些元素,如new Date().valueOf()
和其他一些元素方法(例如属性arguments
和其他许多方法)中的语句将无法正常工作,似乎我的文件也没有包含所有其他方法的包装器方法,如:
(function (scope) {
function Start() {
...
}
...
}(this));
当使用在JS中有效的new Date().valueOf()
之类的东西时,我得到:
MissingMethodException:找不到方法:'System.DateTime.valueOf'。 Boo.Lang.Runtime.DynamicDispatching.MethodDispatcherFactory.ProduceExtensionDispatcher()
那么编译器可能会将最初的'unityscript'代码转换为Boo语言?所以也许Boo是正确的“原生”选择,也许unityscript本身不是开发unity3d应用程序时最好的方法吗?
我正在考虑一种语言,它完全支持所有已知的本机类和方法,这些语言和方法可以正常工作吗?
对于上述任何错误感到抱歉,请告诉我您的想法。
答案 0 :(得分:9)
Unity本身并不使用“真正的”Javascript。参见:
http://forum.unity3d.com/threads/1117-Javascript-Version
UnityScript基于javascript 2.0。缺少一些东西(switch语句等),但它们的速度只有C ++的一半,这比Mozilla快。
一旦你习惯了它,用'JS'进行统一开发是非常非常快速和灵活的......但是当然,如果你要开发本机组件,或者接口到C中的任何东西,你将会需要使用C#(最后,C#并不难学)。
答案 1 :(得分:9)
如果您想成为Unity的开发人员并在其上建立职业生涯,请学习C#并使用它 - 不要在UnityScript上浪费您的时间。您可以在Unity之外使用C#进行编程。如果您的主要职业已经是Web开发(或将是),那么继续使用javascript,因为最终C#和UnityScript具有相同的功能,但C#更广泛地用于编写游戏和应用程序。
我使用的商店中的大多数资产都是C#或提供JS和C#。语言之间的混合会产生严重的依赖性问题,因为为了在任一语言中使用类,它必须已经由Unity脚本加载顺序处理。要在C#中使用Javascript定义的类,必须在C#脚本文件之前处理该脚本文件。如果javscript类后来需要来自C#类的东西,你必须找到解决方法,因为它不再可能来自javascript文件。 Unity有办法定义脚本顺序。
我认为我会警告你将C#与UnityScript混合,因为如果你不专注于其中一个,你会遇到这个问题。最终,C#是像VB和JavaScript这样含糊不清的语言和像C ++这样的迂腐语言(我有大约10年的C / C ++背景)之间的中间地带。
你的头衔“什么是最好的xxx”会产生自以为是的答案,但我试图在不主观的情况下提供最好的建议。 C#将允许你继续,即使Unity从现在起一年后就会消失。 UnityScript / JavaScript只允许您成为Web开发人员。 C#开发人员可以很容易地进入UnityScript / JavaScript,但反过来要困难得多(不是不可能,只是更难)。
答案 2 :(得分:3)
你应该使用c#。它是流行的,成熟的,原生于.NET。 c#是大团队使用的。学习c#将来会很有用。 Unity3D中的JS并不是真正的JS,如前所述,没有人听说过Boo。
答案 3 :(得分:1)
JS是与Unity一起使用的最流行的语言。但该语言是在Mono中实现的,因此该实现中的任何限制也会影响Unity脚本。
我不知道JS的Mono实现如何工作,但从错误消息判断,它至少使用最初为Boo定义的数据类型。然而,这并不意味着JS“变成了Boo”。两者都被编译成相同的字节码,这是由Mono运行时JIT和运行的。因此,这两种语言都不比其他语言“更本土化”。
答案 4 :(得分:0)