下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 第三讲_Unity脚本入门

第三讲_Unity脚本入门.pdf

第三讲_Unity脚本入门

270327760
2012-06-01 0人阅读 举报 0 0 暂无简介

简介:本文档为《第三讲_Unity脚本入门pdf》,可适用于游戏领域

Unity脚本入门第一个脚本游戏Unity脚本入门在Unity中脚本是必不可少的组成部分,因为它将定义游戏的各种行为Unity推荐使用的编程语言是JavaScript,但是C#或Boo同样也可以。这节课将介绍JavaScript的基本使用及脚本的重要内容(API)命名规范在开始前,先说一下在Unity中的一些规范z变量–首写是小写字母变量用来储存游戏状态中的任何信息z函数–首写是大写字母函数是一个代码块,只需要写一次,在需要时候可以被再次重用z类–首写是大写字母可以被认为是函数的库提示:当阅读范例代码或者Unity的API,要注意首写字母,这将有助于你更好的理解对象之间的关系第一个脚本游戏我们的第一个脚本游戏是在一个简单的游戏场景中走动第一步:设置场景即在游戏场景中添加地面和游戏对象。z地面可由一个扁的Cube代替z创建一个Cube,缩放x,y,z为”,,”,它现在看起来应该是一个大平板在层次视图(HierarchyView)中重命名为”Plane”第一个脚本游戏z游戏对象可由另一个Cube代替z创建第二个Cube,将它放置在这个大平板的中心位置如果在游戏视图(GameView)看不到它们,那么改变主相机位置使它们可见重命名该物体为”Cube”z还应该建立一个点光源,并且放在大平板之上,使它们更清晰第一个脚本要想让游戏对象cube运动起来就需要加入脚本。通过控制主相机的位置来实现,要做到这一点,我们现在要写一个脚本来读取键盘的输入然后把脚本和相机链接起来。第一个脚本首先创建一个空脚本z选择”Assets>Create>Javascript”并在项目面板重命名为”Move”z双击Move脚本,它将打开,并且默认包含有Update()函数,我们将我们编写的代码插入这个函数,任何加入Update()函数中的代码都将在每一帧(frame)执行一次第一个脚本Update()函数:这个函数在渲染一帧之前被调用。这里是大部分游戏行为代码被调用的地方。在Unity中为了移动一个游戏对象我们需要用transform来更改它的位置,属于Translate,这个Translate函数有x,y和z三个参数,因为我们想通过光标键控制主相机,我们只需要下面这些代码,来决定按键按下后参数的变化:第一个脚本functionUpdate(){transformTranslate(InputGetAxis(“Horizontal”),,InputGetAxis("Vertical"))}InputGetAxis()函数返回或的一个值,例如在横轴上左光标键映射为,右光标键映射为横轴和竖轴是在输入设置(InputSettings)中预先定义好的从Edit>ProjectSettings>Input中很容易重定义按键映射注意:参数为y轴,因为我们不希望镜头上仰第一个脚本打开脚本Move并输入上面的代码,注意大小写现在我们第一个脚本写完了,怎么让Unity的游戏对象具有这个脚本行为呢第一步:首先点击你希望应用此脚本的游戏对象,对于我们而言,这里将是主相机,你可以从层次视图和场景视图中选择它第二步:从菜单中选择Components>Scripts>Move,将这个脚本赋予相机,你在检视面板中看到主相机有Move这个组件第一个脚本第一个脚本提示:你也可以从项目视图拖拽脚本到场景视图的游戏对象上点击播放按钮运行游戏,你能通过光标键或W,S,A,D键来移动主相机你也许注意到了,摄影机移动的有点太快了,让我们来找一种更好的办法来控制摄像头的速度第一个脚本正如先前在Update()函数里的代码,相机的速度是按帧执行的然而我们需要游戏对象的移动按秒执行为了实现这一目标,我们需要将返回的值乘以InputGetAxis()函数中的TimedeltaTime:第一个脚本varspeed=functionUpdate(){varx=InputGetAxis("Horizontal")*TimedeltaTime*speedvarz=InputGetAxis("Vertical")*TimedeltaTime*speedtransformTranslate(x,,z)}将上面的代码更新到Move脚本注意:Update()外的这个速度变量这是所为的public变量,这个变量会在检视面板中看到它是很有用的,实际使用中可以方便的调整它的值,这比改变代码来说方便的多连接变量通过Unity界面来连接变量的功能是非常强大的zUnity允许在其界面上用拖拽(draganddrop)的方式来赋予游戏对象脚本代码这是快速又简洁的方式这样在Unity界面中完成连接变量的功能。z我们总是需要脚本代码中暴露的变量,以便我们在检视面板中设置数值z为了演示连接变量的概念,我们建立一个跟随玩家(主相机)的聚光灯连接变量z添加一个聚光灯到场景视图,移动它靠近其他游戏对象z创建一个JavaScript脚本并重命名为Follow我们希望主相机的地方有个聚光灯所照耀事实上,Unity中有个函数能做到这一点transformLookAt()连接变量vartarget:TransformfunctionUpdate(){transformLookAt(target)}我们可以使用一个暴露变量(Transform类型)。Followjs脚本如下:连接变量z赋予脚本给聚光灯,当这个脚本成功添加后,”target”变量就会暴露了z选中主相机,从层次视图拖拽主相机到聚光灯监视面板中的”target”暴露变量上分配给target变量,即聚光灯将跟随主相机如果我们想聚光灯跟随不同的对象,我们也可以拖拽不同的对象过去(当然只要它的类型是Transform)z播放游戏,在场景视图中你能看到聚光灯跟随在主相机周围你可以改变聚光灯的位置来改变效果访问组件作为一个游戏对象可以有多个脚本(或其他组件)它不可避免的要访问其他组件的函数或变量Unity中通过GetComponent()函数来实现这个功能现在我们要添加另外的脚本来实现按下跳跃键(默认空格键)的同时让聚光灯射向Cube访问组件让我们先思考这个问题,我们要做的是:监视跳跃键被按下当跳跃键按下时,聚光灯将照射Cube访问组件我们如何做到这一点呢创建一个新的JavaScript脚本并重命名为Switch,添加代码到Switchjs:varswitchToTarget:TransformfunctionUpdate(){if(InputGetButtonDown("Jump"))GetComponent(Follow)target=switchToTarget}访问组件尤其注意关注GetComponent()的值,这将返回一个参考给Follow脚本,我们就可以用它来访问”target”变量z添加Switch脚本到聚光灯和将在检视视图中指定Cube给switchToTarget值z运行游戏,走动验证聚光灯像往常一样跟随着你,然后你按下空格键,聚光灯的焦点将转到Cube上访问组件除了上面的方式之外可以通过写代码的方式指定变量(而不是通过Unity界面),让我们看看如何做记住,这只是用来比较,建议通过Unity界面来给变量赋值早先按下空格时告诉聚光灯聚焦到Cube上我们的解决方案是做一个暴露变量在Switch脚本,我们便可以在Unity的界面上拖拽Cube上去访问组件写代码的方式主要有两种方法做到这一点:使用游戏对象的名称(name)使用游戏对象的标签(tag)访问组件游戏对象名称可以从层次视图中看到游戏对象的名称用GameObjectFind()函数来使这些名称作为参数因此如果我们想按下跳跃键时候切换聚光灯从主相机到Cube,代码如下:functionUpdate(){if(InputGetButtonDown("Jump")){varnewTarget=GameObjectFind("Cube")transformGetComponent(Follow)target=newTarget}}访问组件注意:没有暴露变量而是直接使用代码查看API获得更多Find()的用法访问组件游戏对象标签游戏对象标签是字符串用于识别一个组件的标志在检视视图中点击Tag按钮查看内建的标签你也可以创建自己的标签访问组件GameObjectFindWithTag()函数能通过具体标签寻找组件和返回一个字符串作为参数代码如下:functionUpdate(){if(InputGetButtonDown("Jump")){varnewTargetGameObjectFindWithTag("Cube")transformGetComponent(Follow)target=newTarget}}实例通常在运行时创建(create)对象(如游戏正在播放)这时我们要用到Instantiate函数下面我们学习如何在每次按下开火按钮(或按鼠标左键或左Ctrl键)后通过实例(建立)一个新的游戏对象我们怎么做呢我们希望用户像往常一样走动,当按下开火按钮,实例化创建一个新的对象实例思考以下几点:哪个物体做我们的实例在哪里做实例化关于哪个对象到实例,最好的解决办法是暴露变量这意味着我们随时可以通过拖拽游戏对象到变量来改变对象为实例实例至于哪里做实例化,现在我们只要实现当按下开火按钮时在用户(主相机)当前位置创建新的游戏对象实例化函数有三个参数:()我们要建立一个对象,()对象的三维位置()对象的旋转位置实例完整的代码如下(Createjs):varnewObject:TransformfunctionUpdate(){if(InputGetButtonDown("Fire")){Instantiate(newObject,transformposition,transformrotation)}}实例不要忘记,transformposition和transformrotation是附加到脚本的transform的位置和旋转这里假如是主相机(MainCamera)然而,当一个对象被实例化,通常将对象设置为预设(prefab),我们现在将Cube游戏对象设置为预设实例z首先,让我们创建一个空的预设,选择Assets>Create>Prefab重命名这个预设为”Cube”z从层次视图拖拽Cube游戏对象到项目视图的Cube预设上注意预设图标的变化实例现在我们创建Javascript代码z创建一个新的脚本和命名为Create,并插入上面的代码z把这个脚本赋予给主相机(MainCamera)和将Cube预设赋予主相机上的newObject变量z运行游戏,并向以往一样走动每当按下开火按钮(鼠标左键或左Ctrl)你都能看到一个新的Cube出现调试调试是发现和修正你的代码中人为错误的技巧,Unity中提供了Debug类,我们现在看看DebugLog()函数LogLog()函数允许用户发送信息到Unity的控制台这样做的原因可能包括:在运行时要验证某部分代码是否达成报告变量的状态调试我们现在使用Log()函数,当用户点击开火按钮时发送一个消息到Unity控制台打开创建的脚本并在”Instantiate’”代码内”if”处添加如下代码:DebugLog("Cubecreated")运行游戏和点击开火按钮,你能看到Unity界面下方显示”Cubecreated”,你可以点击这个提示详细查看Unity控制台调试另外一个有用的功能是用于调试私有变量。再次打开创建的脚本并添加两行:()添加私有变量引用cubeCount()当一个cube实例创建后增加这个变量调试完整代码如下(Createjs):varnewObject:TransformprivatevarcubeCount=functionUpdate(){if(InputGetButtonDown("Fire")){Instantiate(newObject,transformposition,transformrotation)DebugLog("Cubecreated")cubeCount}}调试运行游戏并点击开火按钮创建一些Cube,注意每当一个新的Cube实例创建后cubeCount变量的递增同样这个数值是灰色的,意味着变量是只读的(不能编辑)第三讲幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号幻灯片编号

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/44

第三讲_Unity脚本入门

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利