




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Unity脚本入门脚本入门深圳市国泰安信息技术有限公司一、命名规范二、第一个脚本三、连接变量四、访问组件五、实例六、调试命名规范在开始前,先说一下在Unity中的一些规范. 1、变量首写是小写字母.变量用来储存游戏状态中的任何信息. 2、函数首写是大写字母.函数是一个代码块,只需要写一次,在需要时候可以被再次重用. 3、类首写是大写字母.可以被认为是函数的库. 第一个脚本我们的第一个脚本是在一个简单的游戏场景中走动. 第一步:设置场景,即在游戏场景中添加地面和游戏对象。 地面可由一个扁的Cube代替. 创建一个Cube,缩放x,y,z为”5,0.1,5”,它现在看起来应该是一个大平板.在层次视
2、图(Hierarchy View)中重命名为”Plane”. 第一个脚本我们的第一个脚本游戏是在一个简单的游戏场景中走动.第一步:设置场景,即在游戏场景中添加地面和游戏对象。地面可由一个扁的Cube代替. 创建一个Cube,缩放x,y,z为”5,0.1,5”,它现在看起来应该是一个大平板.在层次视图(Hierarchy View)中重命名为”Plane”. 第一个脚本 游戏对象可由另一个Cube代替. 创建第二个Cube,将它放置在这个大平板的中心位置.如果在游戏视图(Game View)看不到它们,那么改变主相机位置使它们可见.重命名该物体为”Cube1”. 还应该建立一个点光源,并且放在大
3、平板之上,使它们更清晰. 第一个脚本我们的第一个脚本游戏是在一个简单的游戏场景中走动.第一步:设置场景,即在游戏场景中添加地面和游戏对象。地面可由一个扁的Cube代替. 创建一个Cube,缩放x,y,z为”5,0.1,5”,它现在看起来应该是一个大平板.在层次视图(Hierarchy View)中重命名为”Plane”. 第一个脚本要想让游戏对象cube1运动起来,就需要加入脚本。通过控制主相机的位置来实现,要做到这一点,我们现在要写一个脚本来读取键盘的输入.然后把脚本和相机链接起来。 首先创建一个空脚本. 选择”Assets-Create-Javascript”并在项目面板重命名为”Move
4、1”. 双击Move1脚本,它将打开,并且默认包含有Update()函数,我们将我们编写的代码插入这个函数,任何加入Update()函数中的代码都将在每一帧(frame)执行一次.第一个脚本第一个脚本 Update()函数: 这个函数在渲染一帧之前被调用。这里是大部分游戏行为代码被调用的地方。 在Unity中为了移动一个游戏对象我们需要用transform来更改它的位置,属于Translate,这个Translate函数有x,y和z三个参数,因为我们想通过光标键控制主相机,我们只需要下面这些代码,来决定按键按下后参数的变化: Input.GetAxis()函数返回-1或1的一个值,例如在横轴上
5、左光标键映射为-1,右光标键映射为1. 横轴和竖轴是在输入设置(Input Settings)中预先定义好的.从Edit-Project Settings-Input中很容易重定义按键映射.注意:参数0为y轴,因为我们不希望镜头上仰.function Update () transform.Translate(Input.GetAxis(“Horizontal”), 0,Input.GetAxis(Vertical); 第一个脚本打开脚本Move1并输入上面的代码,注意大小写.现在我们第一个脚本写完了,怎么让Unity的游戏对象具有这个脚本行为呢? 第一步:首先点击你希望应用此脚本的游戏对象,
6、对于我们而言,这里将是主相机,你可以从层次视图和场景视图中选择它. 第二步:从菜单中选择Components-Scripts-Move1 ,将这个脚本赋予相机,你在检视面板中看到主相机有Move1这个组件. 第一个脚本第一个脚本提示:也可以从项目视图拖拽脚本到场景视图的游戏对象上. 点击播放按钮运行游戏,你能通过光标键或W,S,A,D键来移动主相机.你也许注意到了,摄影机移动的有点太快了,让我们来找一种更好的办法来控制摄像头的速度. 正如先前在Update()函数里的代码,相机的速度是按帧执行的.然而我们需要游戏对象的移动按秒执行.为了实现这一目标,我们需要将返回的值乘以Input.GetAx
7、is()函数中的Time.deltaTime:第一个脚本varspeed = 5.0; function Update () varx = Input.GetAxis(Horizontal) * Time.deltaTime* speed; varz = Input.GetAxis(Vertical ) * Time.deltaTime* speed; transform.Translate(x, 0, z); 将上面的代码更新到Move1脚本. 注意:Update()外的这个速度变量.这是所为的public变量,这个变量会在检视面板中看到.它是很有用的,实际使用中可以方便的调整它的值,这比改
8、变代码来说方便的多. 连接变量 通过Unity界面来连接变量的功能是非常强大的. Unity允许在其界面上用拖拽(drag and drop)的方式来赋予游戏对象脚本代码. 这是快速又简洁的方式.这样在Unity界面中完成连接变量的功能。 我们总是需要脚本代码中暴露的变量,以便我们在检视面板中设置数值. 为了演示连接变量的概念,我们建立一个跟随玩家(主相机)的聚光灯. 添加一个聚光灯到场景视图,移动它靠近其他游戏对象. 创建一个JavaScript脚本并重命名为Follow. 我们希望主相机的地方有个聚光灯所照耀.事实上,Unity中有个函数能做到这一点. transform.LookAt()
9、. 我们可以使用一个暴露变量(Transform类型)。 Follow.js脚本如下: vartarget : Transform; function Update () transform.LookAt(target); 连接变量 赋予脚本给聚光灯,当这个脚本成功添加后,”target”变量就会暴露了. 选中主相机,从层次视图拖拽主相机到聚光灯监视面板中的”target”暴露变量上分配给target变量,即聚光灯将跟随主相机.如果我们想聚光灯跟随不同的对象,我们也可以拖拽不同的对象过去(当然只要它的类型是Transform). 播放游戏,在场景视图中你能看到聚光灯跟随在主相机周围.你可以改变
10、聚光灯的位置来改变效果.访问组件作为一个游戏对象可以有多个脚本(或其他组件).它不可避免的要访问其他组件的函数或变量.Unity中通过GetComponent() 函数来实现这个功能. 现在我们要添加另外的脚本来实现按下跳跃键(默认空格键)的同时让聚光灯射向Cube1. 让我们先思考这个问题,我们要做的是: 1.监视跳跃键被按下. 2. 当跳跃键按下时,聚光灯将照射Cube1.我们如何做到这一点呢?创建一个新的JavaScript脚本并重命名为Switch,添加代码到Switch.js:varswitchToTarget: Transform; function Update () if (I
11、nput.GetButtonDown(Jump) GetComponent(Follow).target = switchToTarget; 尤其注意关注GetComponent()的值,这将返回一个参考给Follow脚本,我们就可以用它来访问”target”变量. 添加Switch脚本到聚光灯和将在检视视图中指定Cube1给switchToTarget值. 运行游戏,走动验证聚光灯像往常一样跟随着你,然后你按下空格键,聚光灯的焦点将转到Cube1上. 除了上面的方式之外,可以通过写代码的方式指定变量(而不是通过Unity界面),让我们看看如何做.记住,这只是用来比较,建议通过Unity界面来
12、给变量赋值.早先按下空格时告诉聚光灯聚焦到Cube1上.我们的解决方案是做一个暴露变量在Switch脚本,我们便可以在Unity的界面上拖拽Cube1上去. 写代码的方式主要有两种方法做到这一点: 1.使用游戏对象的名称(name) 2. 使用游戏对象的标签(tag)游戏对象名称可以从层次视图中看到游戏对象的名称.用 GameObject.Find()函数来使这些名称作为参数.因此如果我们想按下跳跃键时候切换聚光灯从主相机到Cube1,代码如下: function Update () if (Input.GetButtonDown(Jump) varnewTarget= GameObject.
13、Find(Cube1).transform;GetComponent(Follow).target = newTarget; 注意:没有暴露变量而是直接使用代码.1.查看API获得更多Find()的用法2. 游戏对象标签游戏对象标签是字符串用于识别一个组件的标志.在检视视图中点击Tag按钮查看内建的标签.你也可以创建自己的标签. GameObject.FindWithTag()函数能通过具体标签寻找组件和返回一个字符串作为参数.代码如下: function Update () if (Input.GetButtonDown(Jump) varnewTargetGameObject.FindWi
14、thTag(Cube1).transform;GetComponent(Follow).target = newTarget; 通常在运行时创建(create)对象(如游戏正在播放).这时我们要用到Instantiate函数. 下面我们学习如何在每次按下开火按钮(或按鼠标左键或左Ctrl键)后通过实例(建立)一个新的游戏对象. 我们怎么做呢?我们希望用户像往常一样走动,当按下开火按钮,实例化创建一个新的对象. 思考以下几点: 哪个物体做我们的实例? 在哪里做实例化? 关于哪个对象到实例,最好的解决办法是暴露变量.这意味着我们随时可以通过拖拽游戏对象到变量来改变对象为实例. 至于哪里做实例化,现
15、在我们只要实现当按下开火按钮时在用户(主相机)当前位置创建新的游戏对象. 实例化函数有三个参数:(1)我们要建立一个对象,(2)对象的三维位置(3)对象的旋转位置.完整的代码如下(Create.js):varnewObject: Transform; function Update () if (Input.GetButtonDown(Fire1) Instantiate(newObject, transform.position, transform.rotation); 不要忘记, transform.position和transform.rotation是附加到脚本的transform的
16、位置和旋转,这里假如是主相机(Main Camera).然而,当一个对象被实例化,通常将对象设置为预设(prefab),我们现在将Cube1游戏对象设置为预设. 首先,让我们创建一个空的预设,选择Assets-Create-Prefab.重命名这个预设为”Cube”. 从层次视图拖拽Cube1游戏对象到项目视图的Cube预设上.注意预设图标的变化. 现在我们创建Javascript代码. 创建一个新的脚本和命名为Create ,并插入上面的代码. 把这个脚本赋予给主相机(Main Camera)和将Cube预设赋予主相机上的newObject 变量. 运行游戏,并向以往一样走动.每当按下开火按
17、钮(鼠标左键或左Ctrl)你都能看到一个新的Cube出现. 调试是发现和修正你的代码中人为错误的技巧,Unity中提供了Debug类,我们现在看看Debug.Log()函数. Log Log()函数允许用户发送信息到Unity的控制台.这样做的原因可能包括:1. 1.在运行时要验证某部分代码是否达成. 2. 报告变量的状态.我们现在使用Log()函数,当用户点击开火按钮时发送一个消息到Unity控制台. 打开创建的脚本并在”Instantiate”代码内”if”处添加如下代码: Debug.Log(Cube created); 运行游戏和点击开火按钮,你能看到Unity界面下方显示”Cube created”,你可以点击这个提示详细查看Unity控制台. 另外一个有用的功能是用于调试私有变量。 再次打开创建的脚本并添加两行: (1)添加私有变量引用cubeCount (2)当一个cube实例创建后增加这个变量完整代码如下(Create.js): varnewObject: Transfo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年锅炉运行值班员考试题库及答案
- 2025年新疆籽棉加工企业市场调研合同
- 生活用水电气设施管理合同
- 高端精密机械加工及加工设备维护合同
- 破阵子中考试题及答案
- 化学期中考试试卷及答案
- 日照辅警笔试题库及答案
- 日本驾校笔试题目及答案
- 宁乡县中考试卷及答案
- 建交委焊工证考试题及答案
- 公司工程数量管理办法
- 宇宙中的地球 1.3地球的历史(第1课时)课件
- 支部委员会委员选票一
- 锅炉安装改造维修施工工艺标准
- 如何书写个案护理报告
- 一线医务人员登记表(模板)
- GB/T 1591-2018低合金高强度结构钢
- 战略销售蓝表中文版
- 2021年四年级数学上册二两三位数除以两位数整理与练习课件苏教版
- 人体解剖学01绪论课件
- 第3节金属的塑性加工
评论
0/150
提交评论