版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机游戏程序设计实验指导书河北工业大学计算机科学与软件学院实验一 Unity游戏脚本一、实验目的与要求1. 熟悉及掌握MonoDevelop脚本编辑器的使用方法。2. Unity脚本的生命周期。3. 熟练使用脚本来操作游戏对象。二、实验原理及知识点Unity游戏脚本在整个游戏开发中可以说是关键要素,游戏对象之间任何逻辑的判断都需要通过脚本来完成。如果说游戏贴图、模型资源的好坏决定一个游戏的视觉品味,那么脚本将直接决定这个游戏的内在质量,决定这个游戏好玩与否。游戏脚本与其他游戏组件用法相同,必须绑定在游戏对象中才能执行它的生命周期。Unity一共支持3种语言来编写脚本,分别是JavaScrip
2、t、C#、Boo,这3种语言不分好坏,用哪一种来编写都可以达到同样目的。从编程技巧与难度上来讲,JavaScript更容易上手一些,建议初学者使用JavaScript进行入门阶段学习,但是进阶阶段推荐使用C#语言来编写脚本,因为C#语言在编程思想上更符合Unity引擎的原理。由于与传统语言相比,Boo语言的语法更为怪异,所以开发中几乎不会用到它。1 MonoDevelop脚本编辑器Unity可部署在Windows与Mac OS X梁总操作系统下,所以Unity需要一个跨平台的脚本编辑器。MonoDevelop脚本编辑器并不是Unity公司所研发的。它是一个开源项目,任何人或公司都可以使用。由于
3、该编辑器具有强大的跨平台功能,并且使用起来非常方便,所以很快被Unity公司作为核心脚本开发环境使用。2 Unity脚本的生命周期Unity脚本从唤醒到销毁有着一套比较完善的生命周期,添加任何脚本都必须遵守自身生命周期法则。下面介绍一下生命周期中有系统自身调用的几个比较重要的方法。function Awake()。脚本唤醒,此方法为系统执行的第一个方法,用于脚本的初始化,在脚本的生命周期中只执行一次。function Start()。此方法在Awake()方法之后、Update()方法之前执行,并且只执行一次。function Update()。正常更新,用于更新逻辑。此方法每帧都会由系统自动
4、调用一次。function LateUpdate()。推迟更新,此方法在Update()方法执行完后调用,同样每一帧都调用。function FixedUpdate()。固定更新,固定更新常用于移动模型等操作。因为固定更新每一帧调用的时间相隔都是完全一样的,所以模型的移动过程会比较均匀。function OnGUI()。绘制界面。这个方法大家应该不会陌生,因为在第3章中已经做过很多例子了。它和Update()方法一样,每一帧都在调用,只是它是用来绘制界面的。function OnDestroy()。当前脚本销毁时调用。3利用脚本来操作游戏对象在Unity场景中出现的所有实体都属于游戏对象,比如
5、系统自带的立方体、球体以及由美工制作的.Fbx游戏模型等。游戏对象与脚本联系非常紧密,因为游戏对象之间的一切交互都需要使用脚本来完成。下面我们开始学习如何使用脚本来操作游戏对象。使用脚本来调用游戏对象的方式有两种,它们是:可以将脚本绑定在一个游戏对象身上,也可以在代码中动态绑定脚本和删除脚本。任何一个游戏对象都可以同时绑定多条游戏脚本,并且这些脚本互不干涉,各自完成各自的生命周期。3.1 创建游戏对象创建游戏对象的方式共有一下两种。第一种为将模型预先放入Hierarchy视图中,然后在场景视图中任意拖动该模型在3D世界中的位置,运行游戏后该模型就会出现在Game视图中。第二种为在代码中根据条件
6、动态创建与删除游戏对象,这种处理方式灵活性比较高。3.2 获取游戏对象在脚本中获取游戏对象的方式一共有三种:第一种为通过对象名称获取,第二种为通过标签(tag)获取单个游戏对象,第三种为通过相同标签获取多组游戏对象。3.3 添加组件与修改组件新创建的游戏对象本身并不具备任何特性,为了让它具备一些功能,就必须给其添加游戏组件。游戏组件的种类非常多,常见的游戏组件有脚本类、网格类、粒子类、物理类、声音类和渲染类等。本节中我们将学习如何在代码中添加与修改游戏组件。添加游戏组件时,可以使用AddComponent()方法。由于组件自身没有对应的删除方法,需要使用父类执行Object.Destroy()
7、方法才能删除它,其中该方法的参数为需要删除的游戏对象或游戏组件。在删除某一游戏对象时,将连带该对象中的所有组件一并删除。3.4 克隆游戏对象克隆游戏对象与创建游戏对象在效果的呈现方式是完全一样的,但是从执行效率上来讲,克隆游戏对象的效率要高。使用脚本克隆游戏对象在游戏中应用非常广泛,常用于一些完全相同并且数量庞大的游戏对象,比如游戏中发射的子弹对象,每一颗子弹对象是完全一样的,每一次发射子弹都会新克隆一个子弹对象,并且让克隆的子弹对象完成自己的生命周期。在代码中,需要使用Instantiate()方法克隆游戏对象。4 用脚本来控制对象的变换在3D世界中,任何一个游戏对象在创建的时候都会附带Tr
8、ansform(变换)组建,并且该组建是无法删除的。Transform面板中一共包含3个属性:Position(位置)、Rotation(旋转)和Scale(缩放)。在场景中使用移动工具来拖动和旋转模型,即可直接在Transform面板中看到编辑后的值,此外也可在Transform面板的编辑框中修改对象的位置、旋转方式和缩放的数值。4.1 改变游戏对象的位置在3D世界中,任何一个模型的三维坐标都保存在Vector3容器中,该容器将记录模型在x轴、y轴和z轴方向的坐标。一旦在程序中修改该模型在Vector3容器中的坐标,那么Scene视图中模型的位置将发生改变。4.2 旋转游戏对象模型的旋转方式
9、可分为2种:第一种为自身旋转,意思是模型沿着自己的x轴,y轴或z轴方向旋转;第二种为围绕旋转,意思是模型围绕着坐标系中的抹一点或摸一个游戏对象整体来做旋转。下面简要介绍一下经常会用到的一些重要方法和参数。 transform.Rotate():该方法用于设置模型绕自身旋转,起参数为旋转的速度与旋转的方向。 transform.RRotateAround():该方法用于设置模型围绕某一个点旋转。 Time.deltaTime:用于记录上一帧所消耗的时间,这里用作模型旋转的速度系数。 Vector3.right:x轴方向。 Vector3.up:y轴方向。 Vector3.forward:z轴方向
10、。当模型绕自身旋转时,可以使用objCube.transform.Rotate()方法,当模型围绕抹一点旋转时,则使用objCube.transform.RotateAround()方法。4.3 平移游戏对象平移的含义是模型在原有位置的基础上继续移动,在代码中可以使用transform.Translate()方法来实现,此方法的唯一参数为平移模型的方向。4.4 缩放游戏对象在Unity中,可以通过代码动态缩放游戏中的模型。主要有三种缩放方式:沿x轴缩放、沿y轴缩放、沿z轴缩放。每个轴都有自身的缩放洗漱,模型默认的缩放系数是1,就是模型原有大小,因此要在程序中实现模型的缩放,只需要动态修改模型的
11、缩放系数即可。三、实验内容及步骤1. 熟悉MonoDevelop脚本编辑器的使用方法,联系实现脚本调试。2. 编程实现创建游戏对象(立方体,球体),给游戏对象命名,改变颜色,添加刚体组件。代码:using UnityEngine;using System.Collections;public class gameobject : MonoBehaviour / Use this for initializationvoid Start () var objCube=GameObject.CreatePrimitive(PrimitiveType.Cube);objCube.AddCompone
12、nt(typeof(Rigidbody);objC=Cube;objCube.renderer.material.color=Color.blue;objCube.transform.position=new Vector3(1f,0.0f,0.0f);GameObject objSphere=GameObject.CreatePrimitive(PrimitiveType.Sphere);objSphere.AddComponent(typeof(Rigidbody);objS=Sphere;objSphere.renderer.material.colo
13、r=Color.red;objSphere.transform.position=new Vector3(-1f,0.0f,0.0f);/ Update is called once per framevoid Update () 实验结果:此效果是在有光线的情况下,如果没有光线,物体看上去为黑色。物体具有刚体属性,受到重力作用,如果没有平面支持,物体将会一直做自由落体运动。3. 分别通过名称、标签获得游戏对象,通过标签获得多个游戏对象。(1)首先创建立方体和球体两个对象(2) 创建标签,再对立方体和球体应用此标签。 (3)编写脚本分别通过物体名称和物体物体标签寻找游戏对象。实验结果:4. 通
14、过脚本控制游戏对象,改变游戏对象的位置,旋转游戏对象,缩放游戏对象。代码:using UnityEngine;using System.Collections;public class gameobject : MonoBehaviour public GameObject objCube;public GameObject objSphere;public GameObject objCylinder;/ Use this for initializationvoid Start () objCube=GameObject.CreatePrimitive(PrimitiveType.Cube
15、);objCube.AddComponent(typeof(Rigidbody);objC=Cube;objCube.renderer.material.color=Color.blue;objCube.transform.position=new Vector3(1f,0.0f,0.0f);objSphere=GameObject.CreatePrimitive(PrimitiveType.Sphere);objSphere.AddComponent(typeof(Rigidbody);objS=Sphere;objSphere.renderer.mate
16、rial.color=Color.red;objSphere.transform.position=new Vector3(-1f,-1.52f,2.0f);objCylinder=GameObject.CreatePrimitive(PrimitiveType.Cylinder);objCylinder.AddComponent(typeof(Rigidbody);objC=Cylinder;objCylinder.renderer.material.color=Color.green; objCylinder.transform.position=new Vector3(-3f,-1.52f,0.0f);/ Update is called once per framevoid Update () 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.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年sql数据库开发工程师岗位招聘面试参考题库及参考答案
- 2025年家庭农场经理岗位招聘面试参考试题及参考答案
- 2025年国际事务经理岗位招聘面试参考题库及参考答案
- 2025-2026学年高一物理上学期第一次月考卷(广东)含答案解析
- 一甲胺环境风险识别方法-洞察与解读
- 《物联网移动终端开发》试卷及答案 A卷
- 公司员工培训问题方案研究开题报告
- 化工企业管理创新方案
- 人事和行政的主要职责
- 外委施工单位作业情况和管理措施
- 2025年广东省继续教育公需课《人工智能赋能制造业高质量发展》满分答案
- 学校管理经验介绍材料
- 学校用电安全教育课件
- 2025考评员考试题及答案
- 1.《社会历史的决定性基础》课件+2025-2026学年统编版高二语文选择性必修中册
- 注塑件外观不良
- 2026届浙江杭州市高三一模英语读后续写解析课件(含范文)
- 2026年中国飞机MRO软件项目经营分析报告
- 2025年考研英语二真题及答案解析(完整版)
- Unit1HappyHolidaySectionB1a1d教学课件-人教版八年级英语上册
- 2025年下半年中国振华(集团)新云电子元器件限责任公司招聘易考易错模拟试题(共500题)试卷后附参考答案
评论
0/150
提交评论