第3章 Unity 3D的脚本概述
通过前面的学习,读者应该了解了Unity中一些基本物体的创建,接下来,将介绍Unity中脚本的编写。本书的脚本以JavaScript为主,因此,本章主要讲解JavaScript脚本编写的语法和技巧,具有C#和B00编程基础或是没有编程基础的读者可参考JavaScript入门教材。
3.1 Unity脚本概述
Unity中的脚本由自定义的脚本附加到项目中的游戏对象上构成,这又可以叫作行为。不同的函数或者方法在特定的事件下被调用,实现特定的功能,下面是最常用的。Update方法:这个方法在运行一帧之前被调用,大部分游戏代码在这里面执行,除了物理代码部分。
FixUpdate方法:这个方法会在固定的物理时间步调调用一次。这里也是基本物理行为代码执行的地方。
方法外部代码:方法外部的代码在物体加载时运行,这可以用于初始化脚本状态。
同时,读者也可以使用事件处理程序,这些方法的名称前面都是On(类似于OnCollisionEnter碰撞检测),这些事件都继承自MonoBehaviour类。
3.2 Unity中专用JavaScript与通用JavaScript的区别
虽然用于网页开发的JavaScript完全符合ECMAScript标准,但是Unity中的JavaScript语言却和ECMAScript标准相去甚远,比如用于网页的JavaScript库的绝大部分都无法在Unity中使用。本书将说明Unity中专用JavaScript与通用(ECMAScript)JavaScript的区别。
3.2.1 在运行过程中性能的差异
Unity中专用JavaScript在运行过程中存在着很多特点,其不仅比JavaScript(ECMAScript)速度快,而且性能也更加优异,下面将分别讲解。
速度更快
Unity中的JavaScript已经编译过,其比动态的JSP更快。理论上,在Unity中JavaScript、C#和Boo没有速度上的差异,而且就算在Squirrelfish Extreme模式下,Unity的JavaScript比“真正”的JavaScript还要快。
性能更优异
JavaScript很重要的优化是使用静态类型替代动态类型。Unity使用一种技术叫做类型推理的技术来自动转换JavaScript为静态类型脚本。即Unity通过#pragma strict禁用脚本的动态类型,强制使用静态类型,并且加入了严格的变量检查机制,如果有未知类型的变量,Unity就会报告编译错误。
3.2.2 在语法上的区别
Unity中专用JavaScript在语法上也做了很多的改进,分别对类的定义与使用,继承的实现,数据类型与变量的声明,Mono(.Net)技术的调用以及调试的改进等,接下来将逐个进行讲解。
1.类的定义与使用
Unity中一个.js脚本文件就是一个类。读者可以声明一个和本脚本名字相同的类,如果在脚本中没有声明类,则Unity就以本脚本名自动命名一个类,脚本中的所有声明的对象将变为这个类的成员。
……
展开