ImageVerifierCode 换一换
格式:DOCX , 页数:7 ,大小:66.24KB ,
资源ID:17402482      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17402482.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(游戏程序设计实验2资料Word文档格式.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

游戏程序设计实验2资料Word文档格式.docx

1、游戏脚本与其他游戏组件用法相同,必须绑定在游戏对象中才能执行它的生命周期。Unity一共支持3种语言来编写脚本,分别是JavaScript、C#、Boo,这3种语言不分好坏,用哪一种来编写都可以达到同样目的。从编程技巧与难度上来讲,JavaScript更容易上手一些,建议初学者使用JavaScript进行入门阶段学习,但是进阶阶段推荐使用C#语言来编写脚本,因为C#语言在编程思想上更符合Unity引擎的原理。由于与传统语言相比,Boo语言的语法更为怪异,所以开发中几乎不会用到它。1 MonoDevelop脚本编辑器Unity可部署在Windows与Mac OS X梁总操作系统下,所以Unity

2、需要一个跨平台的脚本编辑器。MonoDevelop脚本编辑器并不是Unity公司所研发的。它是一个开源项目,任何人或公司都可以使用。由于该编辑器具有强大的跨平台功能,并且使用起来非常方便,所以很快被Unity公司作为核心脚本开发环境使用。2 Unity脚本的生命周期Unity脚本从唤醒到销毁有着一套比较完善的生命周期,添加任何脚本都必须遵守自身生命周期法则。下面介绍一下生命周期中有系统自身调用的几个比较重要的方法。function Awake()。脚本唤醒,此方法为系统执行的第一个方法,用于脚本的初始化,在脚本的生命周期中只执行一次。function Start()。此方法在Awake()方法

3、之后、Update()方法之前执行,并且只执行一次。function Update()。正常更新,用于更新逻辑。此方法每帧都会由系统自动调用一次。function LateUpdate()。推迟更新,此方法在Update()方法执行完后调用,同样每一帧都调用。function FixedUpdate()。固定更新,固定更新常用于移动模型等操作。因为固定更新每一帧调用的时间相隔都是完全一样的,所以模型的移动过程会比较均匀。function OnGUI()。绘制界面。这个方法大家应该不会陌生,因为在第3章中已经做过很多例子了。它和Update()方法一样,每一帧都在调用,只是它是用来绘制界面的。f

4、unction OnDestroy()。当前脚本销毁时调用。3利用脚本来操作游戏对象在Unity场景中出现的所有实体都属于游戏对象,比如系统自带的立方体、球体以及由美工制作的.Fbx游戏模型等。游戏对象与脚本联系非常紧密,因为游戏对象之间的一切交互都需要使用脚本来完成。下面我们开始学习如何使用脚本来操作游戏对象。使用脚本来调用游戏对象的方式有两种,它们是:可以将脚本绑定在一个游戏对象身上,也可以在代码中动态绑定脚本和删除脚本。任何一个游戏对象都可以同时绑定多条游戏脚本,并且这些脚本互不干涉,各自完成各自的生命周期。3.1 创建游戏对象创建游戏对象的方式共有一下两种。第一种为将模型预先放入Hie

5、rarchy视图中,然后在场景视图中任意拖动该模型在3D世界中的位置,运行游戏后该模型就会出现在Game视图中。第二种为在代码中根据条件动态创建与删除游戏对象,这种处理方式灵活性比较高。3.2 获取游戏对象在脚本中获取游戏对象的方式一共有三种:第一种为通过对象名称获取,第二种为通过标签(tag)获取单个游戏对象,第三种为通过相同标签获取多组游戏对象。3.3 添加组件与修改组件新创建的游戏对象本身并不具备任何特性,为了让它具备一些功能,就必须给其添加游戏组件。游戏组件的种类非常多,常见的游戏组件有脚本类、网格类、粒子类、物理类、声音类和渲染类等。本节中我们将学习如何在代码中添加与修改游戏组件。添

6、加游戏组件时,可以使用AddComponent()方法。由于组件自身没有对应的删除方法,需要使用父类执行Object.Destroy()方法才能删除它,其中该方法的参数为需要删除的游戏对象或游戏组件。在删除某一游戏对象时,将连带该对象中的所有组件一并删除。3.4 克隆游戏对象克隆游戏对象与创建游戏对象在效果的呈现方式是完全一样的,但是从执行效率上来讲,克隆游戏对象的效率要高。使用脚本克隆游戏对象在游戏中应用非常广泛,常用于一些完全相同并且数量庞大的游戏对象,比如游戏中发射的子弹对象,每一颗子弹对象是完全一样的,每一次发射子弹都会新克隆一个子弹对象,并且让克隆的子弹对象完成自己的生命周期。在代码

7、中,需要使用Instantiate()方法克隆游戏对象。4 用脚本来控制对象的变换在3D世界中,任何一个游戏对象在创建的时候都会附带Transform(变换)组建,并且该组建是无法删除的。Transform面板中一共包含3个属性:Position(位置)、Rotation(旋转)和Scale(缩放)。在场景中使用移动工具来拖动和旋转模型,即可直接在Transform面板中看到编辑后的值,此外也可在Transform面板的编辑框中修改对象的位置、旋转方式和缩放的数值。4.1 改变游戏对象的位置在3D世界中,任何一个模型的三维坐标都保存在Vector3容器中,该容器将记录模型在x轴、y轴和z轴方向

8、的坐标。一旦在程序中修改该模型在Vector3容器中的坐标,那么Scene视图中模型的位置将发生改变。4.2 旋转游戏对象模型的旋转方式可分为2种:第一种为自身旋转,意思是模型沿着自己的x轴,y轴或z轴方向旋转;第二种为围绕旋转,意思是模型围绕着坐标系中的抹一点或摸一个游戏对象整体来做旋转。下面简要介绍一下经常会用到的一些重要方法和参数。 transform.Rotate():该方法用于设置模型绕自身旋转,起参数为旋转的速度与旋转的方向。 transform.RRotateAround():该方法用于设置模型围绕某一个点旋转。 Time.deltaTime:用于记录上一帧所消耗的时间,这里用作

9、模型旋转的速度系数。 Vector3.right:x轴方向。 Vector3.up:y轴方向。 Vector3.forward:z轴方向。当模型绕自身旋转时,可以使用objCube.transform.Rotate()方法,当模型围绕抹一点旋转时,则使用objCube.transform.RotateAround()方法。4.3 平移游戏对象平移的含义是模型在原有位置的基础上继续移动,在代码中可以使用transform.Translate()方法来实现,此方法的唯一参数为平移模型的方向。4.4 缩放游戏对象在Unity中,可以通过代码动态缩放游戏中的模型。主要有三种缩放方式:沿x轴缩放、沿y轴

10、缩放、沿z轴缩放。每个轴都有自身的缩放洗漱,模型默认的缩放系数是1,就是模型原有大小,因此要在程序中实现模型的缩放,只需要动态修改模型的缩放系数即可。三、实验内容及步骤1. 熟悉MonoDevelop脚本编辑器的使用方法,联系实现脚本调试。2. 编程实现创建游戏对象(立方体,球体),给游戏对象命名,改变颜色,添加刚体组件。代码:using UnityEngine;using System.Collections;public class gameobject : MonoBehaviour / Use this for initialization void Start () var objC

11、ube=GameObject.CreatePrimitive(PrimitiveType.Cube); objCube.AddComponent(typeof(Rigidbody); objCube.name=Cube; objCube.renderer.material.color=Color.blue; objCube.transform.position=new Vector3(1f,0.0f,0.0f); GameObject objSphere=GameObject.CreatePrimitive(PrimitiveType.Sphere); objSphere.AddCompone

12、nt(typeof(Rigidbody); objSphere.name=Sphere objSphere.renderer.material.color=Color.red; objSphere.transform.position=new Vector3(-1f,0.0f,0.0f); / Update is called once per frame void Update () 实验结果:此效果是在有光线的情况下,如果没有光线,物体看上去为黑色。物体具有刚体属性,受到重力作用,如果没有平面支持,物体将会一直做自由落体运动。3. 分别通过名称、标签获得游戏对象,通过标签获得多个游戏对象。

13、(1)首先创建立方体和球体两个对象(2) 创建标签,再对立方体和球体应用此标签。(3)编写脚本分别通过物体名称和物体物体标签寻找游戏对象。4. 通过脚本控制游戏对象,改变游戏对象的位置,旋转游戏对象,缩放游戏对象。 public GameObject objCube; public GameObject objSphere; public GameObject objCylinder; objCube=GameObject.CreatePrimitive(PrimitiveType.Cube); objSphere=GameObject.CreatePrimitive(PrimitiveTyp

14、e.Sphere); objSphere.transform.position=new Vector3(-1f,-1.52f,2.0f); objCylinder=GameObject.CreatePrimitive(PrimitiveType.Cylinder); objCylinder.AddComponent(typeof(Rigidbody); objCylinder.name=Cylinder objCylinder.renderer.material.color=Color.green; objCylinder.transform.position=new Vector3(-3f,

15、-1.52f,0.0f); objCube.transform.Rotate(0.0f,Time.deltaTime*200,0.0f); objCube.transform.Translate(Vector3.fwd*Time.deltaTime); objSphere.transform.position=new Vector3(-1f,-1.52f,2.0f*Mathf.Exp(-Time.time/40)*Mathf.Cos(4*Time.time); objCylinder.transform.localScale=new Vector3(1.0f,Mathf.Sin(Time.time)+1,1.0f);效果:小球做带阻尼的简谐运动,立方体边旋转边向前运动。transform.position人为改变游戏对象的位置,因此物体的刚体属性没有显现出来,而translate是物体按一定方向平移,而rotate会认为改变物体方向,所以从我们的角度看,立方体来回打转,做无规律运动,并且立方体仍然显现刚体属性,在没有平面支持的情况下做自由落体运动。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1