版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2023/2/11第三讲:Unity引擎入门篇2游戏开发技术2023/2/12Games二、脚本语言简介三、脚本开发基础本讲提纲一、创建基本游戏场景四、讨论2023/2/13一、创建基本游戏场景2023/2/141.1摄像机游戏场景中至少有一台摄像机,也可以有多台摄像机。多台摄像机可以创建双人分屏效果或高级的自定义效果。Unity中支持两种类型的摄像机(Projection):Perspective透视摄像机Orthographic正交摄像机2023/2/15摄像机类型Perspective透视摄像机四棱台:近大远小适合3D游戏2023/2/16摄像机类型Orthographic正交摄像机长方体:大小一样适合2D游戏2023/2/17摄像机设置剔除掩码cullingmaskLayers设置2023/2/18摄像机设置画中画2023/2/19摄像机设置多相机切换按数字键1,2,3即可进行摄像机的切换。通过【脚本控制】2023/2/1101.2光源Unity提供了4种类型的光源,在合理设置的基础上可以模拟自然界中任何的光源。1、Directionallight:方向光源该类型光源可以被放置在无穷远出,可以影响场景的一切游戏对象;类似于自然界中的日光的照明效果。方向光源是最不耗费图形处理器资源的光源类型。2023/2/1111.2光源2、Pointlight:点光源点光源可从一个位置向四面八方发出光线,影响其范围内的所有对象;类似于灯泡的照明效果;点光源的阴影是较耗费图形处理器资源的光源类型。3、Spotlight聚光灯灯光从一点发出,在一个方向按照一个锥形的范围照射,处于锥形区域内的对象受到光线照射;类似射灯的照明效果。2023/2/1121.2光源4、Arealight:区域光/面光源该类似光源无法应用于实时光照,仅适用于光照贴图烘焙。2023/2/1131.3创建角色角色控制资源包Assets->ImportPackage->CharacterController2023/2/114角色预设体第一人称第三人称2023/2/1151.4天空盒天空盒资源包Assets->ImportPackage->Skyboxes资源包中包含9个天空盒2023/2/116创建天空盒1)首先,准备6张纹理(前、后、左、右、上、下等6个面);2)然后,创建一个材质资源:Assets->Create->Material3)选中该材质,在Inspector视图中,单击Shader->RenderFX->Skybox4)对天空盒材质赋予6张纹理2023/2/117设置天空盒在Unity中,天空盒的使用方法有两种:1、渲染设置edit->RenderSettings2、为摄像机对象添加天空盒组件Component->Rendering->Skybox2023/2/1181.5雾效在unity中,开启雾效的方法非常简单:Edit->RenderSettings项2023/2/119二、脚本语言简介2023/2/1202.1脚本介绍游戏吸引人的地方在于它的可交互性。在Unity中,游戏交互通过脚本编程来实现。那什么是脚本呢?脚本可以理解为附加在GameObject(游戏对象)上的用于定义游戏对象行为的指令代码。通过脚本,开发者可以控制每一个游戏对象的创建、销毁以及对象在各种情况下的行为,进而实现预期的交互效果。2023/2/1212.2Unity脚本语言Unity支持3种脚本语言:JavaSriptC#BooUnity的3种脚本语言实际上在功能和运行速度上都是一样的,区别主要体现在语言特性上。2023/2/1222.2Unity脚本语言三种脚本开发语言的对比JavaScript相对来说语法较为简单,比较容易入门,Unity官方示例中的脚本基本都是用JavaScript写的。C#对于有C/C++基础的读者来说很容易学习,C#本身有很多强大的语言特性,比JavaScript更适合进行深入开发。大多数的Unity第三方插件都是用C#写的,商业游戏项目基本上都是使用C#进行开发。2023/2/1232.3JavaScript基本语法Unity使用的JavaScript和网页开发中常用的JavaScript一样吗?不一样它经过编译后运行速度很快语法方面也有不少区别。也有人将其成为UnityScript。2023/2/124变量JavaScript里变量需要先定义后才能使用。声明一个变量的方法为:var变量名:变量类型例如:2023/2/125变量变量前面可以添加访问修饰符,如:public、protected、private来修饰。Public的变量可以在Inspector视图中查看和编辑,不添加访问修饰符则默认为public.2023/2/126变量JavaScript常用的变量类型:2023/2/127数组JavaScript里可以使用两种数组:内建数组速度最快;可以在Inspector视图里编辑;不能动态调整大小Array数组Array数组可以调整大小;提供了常用的合并、排序等功能;不能在Inspector视图里编辑;速度较内建素组慢;2023/2/128数组内建数组2023/2/129数组Array数组2023/2/130数组内建数组和Array数组可以很方便的转换:2023/2/131运算、比较、逻辑操作符运算操作符2023/2/132运算、比较、逻辑操作符比较操作符2023/2/133运算、比较、逻辑操作符条件操作符2023/2/134语句JavaScript的所有语句均要以分号(;)结尾。语句的注释支持单行注释//支持多行注释/**/。1、条件语句支持if、if-else条件判断以及if-else嵌套使用。
2023/2/135语句2、循环语句支持while、do-while、for、for-in的循环操作。
2023/2/136语句3、switch语句Switch语句用来进行多条件判断,可以替代冗长的if-else嵌套语句
2023/2/137函数JavaScript里的函数格式为:
function函数名(参数1:参数类型,参数2:参数类型…):返回值类型{}2023/2/138函数JavaScript中函数均可以视为Function类型的对象,可以像变量一样进行赋值比较等操作。2023/2/139JavaScript脚本对于JavaScript脚本,Unity会自动地为脚本添加一个与脚本文件名同名的类,并自动地继承于MonoBehaviour。如果使用C#语言来开发,则需要在脚本里显式地写出类名和继承关系。2023/2/1402.4C#基本语法函数C#变量声明方式为:
变量类型变量名;例如:2023/2/141函数变量前面可以添加访问修饰符public、protected、private其中public的变量可以在Inspector视图中查看和编辑,不添加访问修饰符则默认为private(在JavaScript中默认为public)。2023/2/142数组在C#中只能使用内建数组2023/2/143数组虽然不能使用Array数组,但是可以使用ArrayList、List等容器来达到同样的目的。2023/2/144函数C#里的函数格式为:例如:2023/2/145函数函数参数前可以使用关键字out实现返回多个数值。例如:2023/2/146三、脚本开发基础2023/2/1473.1创建脚本Assets->Create->JavaScript(C#Script)2023/2/1483.1创建脚本2023/2/1493.1创建脚本C#ScriptJavaScript2023/2/1503.2脚本必然事件必然事件在Unity的脚本中,可以定义一些特定的函数,这些函数会在满足某些条件时由Unity自动调用,它们被称为必须事件。2023/2/1513.3MonoBehaviour类MonoBehaviour是Unity中一个非常重要的类,它定义了基本的脚本行为,所有的脚本类均需要从它直接或者间接地继承。脚本必然事件就是从MonoBehaviour继承而来。除了必然事件,MonoBehaviour定义了对各种特定事件(例如鼠标在模型上单击,模型碰撞等)的响应函数,这些函数名称均以On作为开头。2023/2/1523.3MonoBehaviour类2023/2/1533.4访问组件一个GameObject游戏组件可能由若干组件构成。例如,在场景中新建一个立方体后,在Inspector视图中可以看到一个简单的立方体包含了4个组件:Transform用于定义对象在场景中的位置、角度、缩放参数MeshFilter用来从资源文件中读取模型BoxCollider用来为立方体添加碰撞效果MeshRender用来在场景中渲染立方体模型2023/2/1543.4访问组件如何访问游戏对象的各种组件并设置组件参数?对于系统内置的常用组件,Unity提供了非常便利的访问方式,只需要在脚本里直接访问组件对应的成员变量即可,这些成员变量定义在MonoBehaviour中并被脚本继承了下来。2023/2/1553.4访问组件常用的组件及其对应的变量注意:如果游戏对象上不存在某组件,则该组件对应变量的值将为空值null2023/2/1563.5访问游戏对象在Unity中,用户可以通过如下几种方式来访问游戏对象。1、通过名称来查找使用函数GameObject.Find如果场景中存在指定名称的游戏对象,那么返回该对象的引用,否则返回null。如果存在多个重名的对象,那么返回第一个对象的引用。2023/2/1573.5访问游戏对象2、通过标签来查找使用函数GameObject.FindWithTag如果场景中存在指定标签的游戏对象,那么返回该对象的引用,否则返回null。如果存在多个游戏对象使用同一标签,那么返回第一个对象的引用。GameObject.Find和.FindWithTag是比较耗时的函数调用,因此不建议在Update函数中调用它们,而是应该在初始化中查找一次以后保持到变量中。2023/2/1583.5访问游戏对象3、通过访问权限为public的变量,然后将要访问的组件或者对象赋值给该变量,就可以在脚本中通过变量来访问组件或对象了。2023/2/1593.6常用脚本APITransform组件Transform组件决定了游戏对象的位置、方向和缩放比例。在游戏中如果想更新玩家位置,设置相机观察角度都免不了要和Transform组件打交道。2023/2/160Transform组件Transform组件的成员变量2023/2/161Transform组件Transform组件的成员函数2023/2/162Transform组件应用示例1)向前方移动
2)绕自身坐标轴Y旋转2023/2/163Transform组件应用示例3)绕世界坐标的Y轴旋转
4)使相机观察方向跟随物体移动2023/2/164Time类在Unity中可以通过Time类用来获取和时间有关的信息(可以用来计算
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论