Unity脚本入门(1)
在Unity中脚本是必不可少的.因为他将定义你游戏的各种行为.这个教程将介绍javaScript的基本使用.
1.目标
在Unity中,脚本是用来界定用户在游戏中的行为(或规则).Unity推荐使用的编程语言是JavaScript,同时也支持C#或Boo.
2.前提
本教程的重点是Unity脚本基础,前提是你已经熟悉了Unity的界面(如果不是,你可以阅读UnityGUI教程).为了使脚本更容易理解,最好有个支持JavaScript语法高亮的代码编辑器,它会将关键字用醒目的方式显示出来.可以使用SubEthaEdit编辑器.
3.命名规范
开始前,先说下Unity的一些规范.
变量 – 首写为小写字母.变量用来存储游戏状态中的任何信息.
函数 – 首写为大写字母.函数是一个代码块,在需要的时候可以被重复调用.
类 – 首写为大写字母.可以被认为是函数的库.
当阅读范例时注意首写字母,将有助于你更好的理解对象之间的关系.
4.用户输入
我们第一个例子是在场景中实现一个简单的移动.
设置场景
-启动Unity.创建一个用来移动的平面.GameObject->CreateOther->Plane.在Inspector面板中设置Position为”0,0,0″.
-创建一个Cube.GameObject->CreateOther->Cube.坐标为”0,1,0″.
-我们都知道现实世界里物体成像靠的是光反射,那么我们这里也是需要光线的.GameObject->CreateOther->PointLight.坐标为”0,5,0″.
-保存.快捷键为Ctrl+s.
我们的第一个脚本
我们打算移动用户的视线,这需要通过控制主相机的位置来实现.我们就要写一个脚本,然后把脚本和相机结合起来.
-创建一个空脚本.Assets->Create->JavaScript并命名为”Move”.重命名快捷键为F2.
-双击打开脚本Move.默认包含Update()函数.将我们的代码加入这个函数,他将在每一帧执行一次.
我们需要用transform来改变相机的位置,用到Translate这个函数,他有x,y,z三个参数.我们加入以下代码:
function Update(){
transform.Translate(Input.GetAxis(“Horizontal”),0,Input.GetAxis(“Vertical”));
}
Input.GetAxis()函数返回一个从-1到1之间的值,如横轴上左半轴为-1到0,右半轴为0到1.如果需要,我们可以通过Edit->ProjectSettings->Input中重定义按键映射.
连接脚本
脚本写完了,如何让他起作用呢?我们需要把脚本赋予物体才行.
-点击希望应用脚本的物体对象.这里对我们而言就是相机.从Hierarchy面板中选中它.
-在菜单中选择Components->Scripts->Move,这样我们便从Inspector面板中看到相机中添加了Move这个组件.(我们也可以用鼠标把脚本拖拽到物体对象上)
点击运行,我们即可前后左右来控制相机移动了.
DeltaTime
放在Update()函数中的代码是按照帧来执行的.如果我们需要物体的移动按照时间秒来执行.为了实现这一目标,我们需要将Input.GetAxis()函数的返回值乘以Time.deltaTime:
var speed = 5;
function Update(){
var x = Input.GetAxis(“Horizontal”) * Time.deltaTime * speed;
var y = Input.GetAxis(“Vertical”) * Time.deltaTime * speed;
transform.Translate(x, 0, z);
}
这里的speed为显式变量,可以在Inspector面板中看到.我们可以在使用中随时调整它的值,很方便.
5.连接变量
Unity允许在界面上拖拽(drag and drop)的方式赋脚本.快捷方便.这里,我们将涉及连接变量的概念.
-在场景中添加一个聚光灯.GameObject->CreateOther->SpotLight.Position为”0,5,0″,Rotation为”90,0,0″.
-创建一个JavaScript脚本,命名为”SpotLight”.
我们想让聚光灯照向主相机.我们可以使用transform.LookAt()这个函数.
如何使用这个函数呢?我们需要创建一个显式变量.在SporLight脚本中写入如下代码:
var target : Transform;
function Update(){
transform.LookAt(target);
}
-把脚本赋予聚光灯对象.记得怎样赋予吗?要么在菜单栏Component中添加,要么鼠标拖放.之后,”target”变量就出现在Inspector面板里了.
-将Hierarchy面板中的主相机对象拖放到Target变量上.如果我们想让聚光灯照向其他物体,我们也可以将其他物体拖放上去,只要是Transform类型的即可.
-运行.你可以看到聚光灯一直照向主相机.
6.访问组件
一个游戏对象可能有多个脚本或其他组件.它将不可避免的要访问其他组件的函数或变量.Unity中通过GetComponent()函数来实现这个目的.我们现在要实现按下空格键后让聚光灯照向Cube.
我们考虑一下这个步骤:1.监视空格键被按下.2.空格键按下后聚光灯照向Cube.由于SporLight脚本中有target变量,我们只需要为这个变量设定新的值就可以了.
-创建一个脚本,命名为Switch,添加如下代码:
var switchToTarget : Transform;
function Update(){
if(Input.GetButtonDown(“Jump”))
GetComponent(SpotLight).target = switchToTarget;
}
注意GetComponent()的参数,它将返回一个参数给SpotLight脚本,我们就可以用它来访问”target”变量.
-添加Switch脚本到聚光灯对象,并将Cube拖放到Inspector面板中的switchToTarge变量上.
-运行.按下空格后,聚光灯将照向Cube.