unity3d script脚本练习

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

unity3d script脚本练习

2011-02-12 03:33:30| 分类:Unity3D | 标签:变量脚本 transform 函数 unity |字号大中小订阅

脚本命名规范:

在开始前,先说一下在Unity中的一些规范.

变量–首写是小写字母.变量用来储存游戏状态中的任何信息.

函数–首写是大写字母.函数是一个代码块,只需要写一次,在需要时候可以被再次重用.

类–首写是大写字母.可以被认为是函数的库.

提示:当阅读范例代码或者Unity的API,要注意首写字母,这将有助于你更好的理解对象之间的关系.

我们第一个项目是在一个简单的游戏场景中走动.

设置场景

- 启动Unity.

首先,让我们创建一个用来行走的平面,用一个扁的Cube.

- 创建一个Cube,缩放x,y,z为”5,0.1,5”,它现在看起来应该是一个大平板.在层次视图(Hierarchy View)中重命名为”Plane”.

- 创建第二个Cube,将它放置在这个大平板的中心位置.如果在游戏视图(Game View)看不到它们,那么改变主相机位置使它们可见.重命名该物体为”Cube1”.

- 你也应该建立一个点光源,并且放在大平板之上,使它们更清晰.

- 保存选择菜单File->Save As保存这个场景文件.

我们第一个脚本我们现在开始游戏设计.我们打算让Player移动. 通过控制主相机的位置来实现,要做到这一点,我们现在要写一个脚本来读取键盘的输入.然后把脚本和相机链接起来(更多的在下一节).

- 首先创建一个空脚本.选择” Assets->Create->Javascript”并在项目面板重命名为”Move1”.

- 双击Move1脚本,它将打开,并且默认包含有Update()函数,我们将我们的代码插入这个函数,任何加入Update()函数中的代码都将在每一帧(frame)执行一次. 在Unity中为了移动一个游戏对象我们需要用transform来更改它的位置,属于Translate,这个Translate函数有x,y和z三个参数,因为我们想通过光标键控制主相机,我们只需要下面这些代码,来决定按键按下后参数的变化:

function Update () { transform.Translate(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); }

Input.GetAxis()函数返回-1或1的一个值,例如在横轴上左光标键映射为-1,右光标键映射为1.

注意参数0为y轴,因为我们不希望镜头上仰.横轴和竖轴是在输入设置(Input Settings)中预先定义好的.从Edit->Project Settings->Input中很容易重定义按键映射.

- 打开脚本Move1并输入上面的代码,注意大小写.

连接脚本现在我们第一个脚本写完了,怎么让Unity的游戏对象具有这个脚本行为呢?我们要做的是赋予这个脚本给游戏对象来体现脚本的行为.

- 首先点击你希望应用此脚本的游戏对象,对于我们而言,这里将是主相机,你可以从层次视图和场景视图中选择它.

- 然后从菜单中选择Components->Scripts->Move1 ,将这个脚本赋予相机,你在检视面板中看到主相机有Move1这个组件. 提示:你也可以从项目视图拖拽脚本到场景视图的游戏对象上.

- 点击播放按钮运行游戏,你能通过光标键或W,S,A,D键来移动主相机.你也许注意到了,摄影机移动的有点太快了,让我们来找一种更好的办法来控制摄像头的速度.

注:其实这里Input.GetAxis只是获得一个方向,真正的是需要我们定义一个时间和速度。

Delta time

正如先前在Update()函数里的代码,相机的速度是按帧执行的.然而我们需要游戏对象的移动按秒执行.为了实现这一目标,我们需要将返回的值乘以Input.GetAxis() 函数中的Time.deltaTime:

function Update () { var x = Input.GetAxis("Horizontal") * Time.deltaTime * speed; var z =

Input.GetAxis("Vertical") * Time.deltaTime * speed; transform.Translate(x, 0, z); }

- 将上面的代码更新到Move1脚本.

注意Update()外的这个速度变量.这是所为的暴露变量,这个变量会在检视面板中看到.它是很有用的,实际使用中可以方便的调整它的值,这比改变代码来说方便的多.

链接变量:

通过Unity界面来连接变量是非常强大的.

Unity的功能.它允许在Unity界面上拖拽(drag and drop)的方式来赋予脚本代码. 这是快速又简洁的主意.

这样在Unity界面中完成连接变量,我们知道我们总是需要脚本代码中暴露的变量,以便我们在检视面板中指派参数.为了演示连接变量的概念,我们建立一个跟随玩家(主相机)的聚光灯.

- 添加一个聚光灯到场景视图,移动它靠近其他游戏对象.

- 创建一个JavaScript脚本并重命名为Follow.

让我们想想我们要做的,我们希望主相机的地方有个聚光灯所照耀.事实上,Unity中有个函数能做到这一点. transform.LookAt(). 如果你开始想”我该怎么做?”和已经想了很多代码.那么要记得经常查看Unity的函数API.,我们能同样的猜想查看API中的” transform’”章节,为感兴趣的游戏对象的位置和旋转. 现在,我们来到连接变量章节,我们如何使用LookAt()参数呢?我们可以编写代码指定一个游戏对象,但是我们是想通过Unity GUI来指派变量,因此我们将用一个暴露变量(Transform类型).我们的Follow.js脚本应该如下:

var target : Transform; function Update () { transform.LookAt(target); }

- 赋予脚本给聚光灯,当这个脚本成功添加后,”target”变量就会暴露了. - 选中聚光灯,从层次视图拖拽主相机到监视面板中的”target”暴露变量上分配给target变量,即聚光灯将跟随主相机.如果我们想聚光灯跟随不同的对象,我们也可以拖拽不同的对象过去(当然只要它的类型是Transform).

- 播放游戏,在场景视图中你能看到聚光灯跟随在主相机周围.你可以改变聚光灯的位置来改变效果.

访问组件

作为一个游戏对象能有多个脚本(或其他组件).它不可避免的要访问其他组件的函数或变量.Unity中通过GetComponent() 函数来实现这个. 我们现在要添加另外的脚本来让按下跳跃键(默认空格键)时让聚光灯射向Cube1.

让我们先思考这个问题,我们要做的是:

1. 监视跳跃键被按下.

相关文档
最新文档