我开始使用 Unity3d 进行游戏开发,我可以看到有 3 种支持的语言用于创建脚本:C#、unityscript 和 Boo...

虽然我以前从事过网页设计,但显然使用过 javascript,但经过几次尝试后,我发现 Unity3d 并没有真正完全支持脚本语言和一些元素,例如 new Date().valueOf() 以及方法中的一些其他语句,例如属性 arguments 还有许多其他方法无法正常工作,而且我的文件似乎也没有包含所有其他方法的包装方法,例如:

(function (scope) {
    function Start() {
        ...
    }
    ...
}(this));

当使用类似的东西时 new Date().valueOf() 这在 JS 中是有效的,我得到:

缺少方法异常:未找到方法:'系统.DateTime.valueOf'。Boo.Lang.Runtime.DynamicDispatching.MethodDispatcherFactory.ProduceExtensionDispatcher ()

那么也许编译器将最初的“unityscript”代码转换为 Boo 语言?所以也许 Boo 是正确的“原生”选择,也许 unityscript 本身并不是开发 unity3d 应用程序时的最佳方式?

我正在考虑一种完全支持所有已知本机类和方法并且可以毫无问题地工作的语言?

对于上述任何错误,我们深表歉意,请告诉我您的想法。

有帮助吗?

解决方案

Unity 本身并不使用“真正的”Javascript。看:

http://forum.unity3d.com/threads/1117-Javascript-版本

UnityScript 基于 javascript 2.0。虽然缺少一些东西(switch 语句等),但它们的速度只有 C++ 的一半,比 Mozilla 快得多。

一旦你习惯了,用“JS”进行统一开发非常非常快速和灵活......但是当然,如​​果你要开发本机组件,或者用 C 语言连接任何东西,你将需要使用C#(说到底,C#并不难学)。

其他提示

如果您想成为 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”会导致固执己见的答案,但我试图在不主观的情况下给出最好的建议。即使一年后 Unity 将消失,C# 也将允许您继续下去。UnityScript/JavaScript 只会让你成为一名 Web 开发人员。C# 开发人员可以轻松地转向 UnityScript/JavaScript,但反之则困难得多(并非不可能,只是更困难)。

你应该使用c#。它很流行、成熟、原生于 .NET。c# 是大团队使用的。学习c#对以后会有用。正如前面提到的,Unity3D 中的 JS 并不是真正的 JS,也没有人听说过 Boo。

JS 是与 Unity 一起使用的最流行的语言。但该语言是在 Mono 中实现的,因此该实现中的任何限制也会影响 Unity 脚本。

我不知道JS的Mono实现是如何工作的,但从错误消息来看,它至少使用了最初为Boo定义的数据类型。然而,这并不意味着JS“变成了Boo”。两者都被编译成相同的字节码,该字节码经过 JIT 处理并由 Mono 运行时运行。因此,这两种语言都不比另一种语言“更本土化”。

查看使用 C# 和 Java 脚本的优缺点 这里。C# 比 JavaScript 快一点,并且您可以获得 C# 提供的额外功能。您可以从以下位置获取人们的意见 这里.

使用 C# 进行开发具有 Visual Studio 2010 的优势。它提供了比 Mono 开发更好的代码完成功能。

仅在 JavaScript 中,变量可以具有未指定的类型。仅当您在声明变量时未赋值时才会发生这种情况。

动态类型变量的性能会变慢,并且可能会遇到转换问题。如果这是一个问题,请使用#pragma strict。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top