Unity 4x游戏开发技巧集锦第二章.pdf

上传人:asd****56 文档编号:70322211 上传时间:2023-01-19 格式:PDF 页数:35 大小:1.64MB
返回 下载 相关 举报
Unity 4x游戏开发技巧集锦第二章.pdf_第1页
第1页 / 共35页
Unity 4x游戏开发技巧集锦第二章.pdf_第2页
第2页 / 共35页
点击查看更多>>
资源描述

《Unity 4x游戏开发技巧集锦第二章.pdf》由会员分享,可在线阅读,更多相关《Unity 4x游戏开发技巧集锦第二章.pdf(35页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Unity 4.x 游戏开发技巧集锦(内部资料) 版权所有 Unity 4.x 游戏开发技巧集锦(内部资料)大学霸 Unity 4.x 游戏开发技巧集锦(内部资料) 版权所有 Unity 4.x 游戏开发技巧集锦(内部资料) 版权所有 大学霸 2 前 言 Unity 是一款世界知名的游戏开发工具,也是一款全面整合的专业游戏引擎。使用 Unity 开发的游戏,可以部署到所有的主流游戏平台,而无需任何修改,如 Windows、Linux、Mac OS X、iOS、Android、Xbox 360、PS3、WiiU 和 Wed 等。据权威机构统计,国内 53.1%的人使用 Unity 进行游戏开发;

2、有 80%的手机游戏是使用 Unity 开发的;苹果应用商店中,有超过 1500 款游戏使用 Unity 开发。强大的工具还需要灵活的应用。现在的游戏种类众多,其中的声光效果更是精彩炫目。作为游戏开发初学者,往往被别人的游戏效果和功能所惊叹,但往往又为自己的游戏所汗颜。本书分析世界各类知名游戏,如仙剑奇侠传、红警、使命召唤、穿越火线、劲舞团、极品飞车、斗地主、植物大战僵尸、天天跑酷等。从这些游戏中选择大量经典应用功能和特效进行讲解,如:极品飞车的后视镜功能 红警警戒的士兵巡逻功能 荣誉勋章的罗盘功能 拳皇的倒计时功能 超级玛丽的消失文字效果 星际争霸的士兵响应效果.相信读者从中学到的将不只是各

3、种特效的实现方法,还会从中感受到无限的成就感和欢乐。1.学习所需的系统和软件学习所需的系统和软件 安装 Windows 7 操作系统 安装 Unity 4.5.2 2.学习建议学习建议 大家学习之前,可以致信到 XXXXXXXXX,获取相关的资料和软件。如果大家在学习过程遇到问题,也可以将问题发送到该邮箱。我们尽可能给大家解决。Unity 4.x 游戏开发技巧集锦(内部资料) 版权所有 大学霸 3 Unity 4.x 游戏开发技巧集锦(内部资料) 版权所有 大学霸 4 目录 第 1 章 熟悉Unity及其简单操作.1 1.1 安装Unity.1 1.2 编辑器的偏好设置.4 1.3 熟悉Uni

4、ty的编辑器界面.5 1.4 将Unity中的资源保存到预设体中.8 1.5 使用Unity内置的资源包.10 1.6 导入自己的资源.11 1.7 导出Untiy中的资源.11 1.8 导入自己的资源包.12 1.9 添加资源包到资源包列表中.13 1.10 使用Project视图检索器.13 第 2 章 摄像机的应用.15 2.1 设置双游戏视图.15 2.1.1 环境准备.15 2.1.2 编写脚本.16 2.1.3 实现效果.18 2.2 在多个游戏视图间切换.19 2.2.1 环境准备.19 2.2.2 编写脚本.19 2.2.3 实现效果.20 2.3 制作镜头光晕效果.21 2.

5、4 制作游戏的快照.24 2.5 制作一个望远镜.27 2.6 制作一个查看器摄像机.30 2.7 使用忍者飞镖创建粒子效果.34 2.7.1 粒子基本属性.34 2.7.2 粒子的值.34 2.7.3 创建粒子效果.35 2.7.4 了解粒子系统的初始化模块.36 第 3 章 材质的应用.39 3.1 创建反射材质.39 3.2 创建自发光材质.41 3.2.1 创建并配置材质.41 3.2.2 制作应用于发光材质的纹理.42 3.2.3 效果展示.44 3.3 创建部分光滑部分粗糙的材质.45 3.3.1 创建并配置材质.45 3.3.2 制作兼具光滑和粗糙效果的纹理.46 3.3.3 效

6、果展示.47 3.4 创建透明的材质.48 Unity 4.x 游戏开发技巧集锦(内部资料) 版权所有 大学霸 5 3.4.1 创建并配置材质.48 3.4.2 制作有透明效果的纹理.48 3.4.3 效果展示.49 3.5 使用cookie类型的纹理模拟云层的移动.50 3.5.1 制作云层效果的纹理.50 3.5.2 在Unity中完成的准备工作.51 3.5.3 编写控制云层移动的脚本.52 3.5.4 效果展示.53 3.6 制作一个颜色选择对话框.53 3.7 实时合并纹理拼脸小示例.56 3.8 创建高亮材质.59 3.9 使用纹理数组实现动画效果.61 3.10 创建一个镂空的材

7、质.64 第 4 章 GUI的应用.67 4.1 绘制一个数字时钟.67 4.2 制作一个模拟时钟.68 4.3 制作一个罗盘.71 4.4 使用雷达说明对象的相对位置.74 4.5 在游戏视图上显示指定数量的纹理.77 4.6 使用不同的纹理表示数值.79 4.7 显示一个数字倒计时.82 4.8 显示一个图片数字倒计时.83 4.9 显示一个饼状图倒计时.85 4.10 逐渐消失的文字信息.88 4.11 显示一个文字财产清单.89 4.12 显示一个图片财产清单.91 4.13 丰富图片清单的内容.93 4.14 允许鼠标滚轮控制滚动条的滚动.96 4.15 使用自定义鼠标取代系统鼠标.

8、98 第 5 章 Mecanim动画系统的应用.102 5.1 给人物模型加Avatar和动画.102 5.1.1 添加Avatar.102 5.1.2 添加动画.104 5.1.3 添加动画控制器.106 5.1.4 人物模型动作效果展示.106 5.1.5 将动画应用于其它的人物模型.107 5.2 自由控制人物模型做各种动作.108 5.2.1 人物模型以及动画属性设置.109 5.2.2 动画控制器的设置添加混合树.111 5.2.3 动画控制器的设置建立过渡.114 5.2.4 创建脚本.116 5.2.5 运行效果展示.118 5.3 动画的融合动画层和身体遮罩.119 5.4 使

9、用脚本代替根动作.124 Unity 4.x 游戏开发技巧集锦(内部资料) 版权所有 大学霸 6 5.4.1 根动作的应用.124 5.4.2 脚本代替根动作做出处理.126 5.5 添加道具到人物模型上.132 5.6 配合人物模型的动作来投掷对象.135 5.7 应用布娃娃物理系统的人物模型.139 5.8 旋转人物模型的上半身去瞄准.143 第 6 章 声音的应用.148 6.1 声音音调配合动画播放速度.148 6.2 添加音量控制.152 6.3 模拟隧道里的回声效果.158 6.4 防止音乐片段在播放的过程中重播.161 6.5 音乐播放结束后销毁游戏对象.163 6.6 制作可动

10、态改变的背景音乐.166 第 7 章 外部资源的应用.173 7.1 使用Resources加载外部资源.173 7.2 使用Resources文件夹加载外部资源.177 7.3 使用网址加载外部资源.182 7.4 使用静态属性存储和加载玩家数据.183 7.4.1 一个游戏的雏形.184 7.4.2 给游戏增加玩家数据存储的功能.186 7.5 使用PlayerPrefs存储和加载玩家数据.190 7.6 为游戏添加截图功能.193 第 8 章 TXT和XML文件的应用.197 8.1 使用TextAsset加载外部文本文件.197 8.2 使用C#文件流加载外部文本文件读取数据.198

11、8.3 使用C#文件流加载外部文本文件写入数据.201 8.4 加载并解析外部的XML文件.202 8.5 使用XMLTextWriter创建XML文件中的数据.204 8.6 使用串行化的方式自动创建XML文件中的数据.208 8.7 使用XMLDocument直接创建包含数据的XML文件.212 第 9 章 角色移动和状态切换.215 9.1 由玩家控制对象的移动.215 9.2 控制对象的朝向.219 9.3 控制对象与对象间的相对移动.222 9.3.1 相对移动寻找.222 9.3.2 相对移动靠近对象时减速.227 9.3.3 相对移动保持距离.229 9.4 控制对象群组的移动.

12、231 9.5 控制角色向前投掷物体.236 9.6 控制角色在一个随机的点出现.242 9.7 控制角色在指定点出现.246 9.8 控制角色按照指定路线行进.248 9.9 控制游戏不同状态间的切换.252 9.10 使用多个类来管理游戏的多个状态.255 Unity 4.x 游戏开发技巧集锦(内部资料) 版权所有 大学霸 7 第 10 章 完善和优化游戏.260 10.1 让游戏处于暂停状态.260 10.2 让游戏在指定时间内减速运行.263 10.3 使用偏振投影实现 3D立体效果.267 10.4 阻止你的游戏在未知的网站上运行.272 10.5 优化原则:使用代码分析技术查找游戏

13、性能瓶颈.273 10.6 优化原则:减少对象的数量不需要的时候就销毁.277 10.7 优化原则:使用委托和事件提升效率.279 10.8 优化原则:使用协同程序有规律的执行逻辑代码.281 10.9 优化原则:将计算量大的任务分到多个帧执行.282 10.10 优化原则:尽量减少对象和组件的查找.284 第 11 章 Unity收费版提供的功能.290 11.1 让摄像机聚焦不同的对象景深效果.290 11.2 为汽车加后视镜.294 11.3 使用声音过滤器模拟水中的音效.298 11.4 在场景对象上播放视频.301 11.5 在Game视图上播放外部的视频文件.304 Unity 4

14、.x 游戏开发技巧集锦(内部资料) 版权所有 大学霸 第 2 章 摄像机的应用 作为游戏开发者,千万不要忽略了摄像机(Camera)的重要性。毕竟玩家是通过摄像机,才看到了游戏的视图。本章将介绍一些摄像机的常见应用。2.1 设置双游戏视图 很多游戏里,一个游戏的视图中,经常会包含另一个游戏视图。而两个视图所呈现的,是由两个摄像机在场景的不同位置所拍摄的画面。例如,QQ 飞车中,除了第三人称视图以外,游戏视图的右侧还有一个跑道位置预览视图,如图 2-1 所示。本节将模拟这种情况,然后说明生成这种视图效果的方法。图 2-1 QQ 飞车中的双游戏视图 2.1.1 环境准备 首先,除了场景中默认生成的

15、 Main Camera 对象外,还需要为场景添加 4 个游戏对象:Directional light、Camera、Cube 和 Sphere。改变两个摄像机的位置,使得它们看到场景中不同的游戏对象,如图 2-2 所示。Unity 4.x 游戏开发技巧集锦(内部资料) 版权所有 大学霸 图 2-2 为场景添加游戏对象,并调整它们的位置 Main Camera 所拍摄到的视图里有球体,Camera 所拍摄到的视图里有立方体,修改Camera 拍摄视图的背景颜色,具体操作是:选中 Camera,在查看器中修改名为 Camera 的组件的 Background 属性为其它的颜色,如图 2-3 所示

16、。最终两个游戏视图合并时,背景颜色可以区分两个视图的边界。图 2-3 修改摄像机所拍摄视图的背景颜色 2.1.2 编写脚本 然后,在 Project 视图里创建一个 C#脚本文件,并命名为 PictureInPicture。打开脚本文件,并向其中添加如下代码:01 using UnityEngine;02 03 public class PictureInPicture:MonoBehaviour 04 05 /定义枚举类型 06 public enum HorizontalAlignmentleft,center,right;07 public enum VerticalAlignmentt

17、op,middle,bottom;08 public enum ScreenDimensionspixels,screen_percentage;09 /定义枚举类型的变量 10 public HorizontalAlignment horizontalAlignment=HorizontalAlignment.left;11 public VerticalAlignment verticalAlignment=VerticalAlignment.top;12 public ScreenDimensions dimensionsIn=ScreenDimensions.pixels;13 14

18、public int width=50;15 public int height=50;16 public float xOffset=0f;17 public float yOffset=0f;Unity 4.x 游戏开发技巧集锦(内部资料) 版权所有 大学霸 18 public bool update=true;19 20 private int hsize,vsize,hloc,vloc;21 /游戏对象初始化时,调用此函数 22 void Start()23 24 AdjustCamera();25 26 /游戏运行时,每一帧都调用此函数 27 void Update()28 29 i

19、f(update)30 AdjustCamera();31 32 void AdjustCamera()33 34 if(dimensionsIn=ScreenDimensions.screen_percentage)/调节视图为指定百分比大小 35 36 hsize=Mathf.RoundToInt(width*0.01f*Screen.width);37 vsize=Mathf.RoundToInt(height*0.01f*Screen.height);38 39 else /调节视图为指定像素大小 40 41 hsize=width;42 vsize=height;43 44 if(h

20、orizontalAlignment=HorizontalAlignment.left)/水平方向上是左对齐 45 46 hloc=Mathf.RoundToInt(xOffset*0.01f*Screen.width);47 48 else if(horizontalAlignment=HorizontalAlignment.right)/水平方向上是右对齐 49 50 hloc=Mathf.RoundToInt(Screen.width-hsize)-(xOffset*0.01f*Screen.width);51 52 else /水平方向上是居中对齐 53 54 hloc=Mathf.R

21、oundToInt(Screen.width*0.5f)55 (hsize*0.5f)-(xOffset*0.01f*Screen.height);56 57 if(verticalAlignment=VerticalAlignment.top)/垂直方向上是顶端对齐 58 59 vloc=Mathf.RoundToInt(Screen.height-vsize)-(yOffset*0.01f*Screen.height);60 61 else if(verticalAlignment=VerticalAlignment.bottom)/垂直方向上是底端Unity 4.x 游戏开发技巧集锦(内

22、部资料) 版权所有 大学霸 对齐 62 63 vloc=Mathf.RoundToInt(yOffset*0.01f*Screen.height);64 65 else /垂直方向上是居中对齐 66 67 vloc=Mathf.RoundToInt(Screen.height*0.5f)68 (vsize*0.5f)-(yOffset*0.01f*Screen.height);69 70 camera.pixelRect=new Rect(hloc,vloc,hsize,vsize);71 72 脚本将依据用户自定义的设置,决定该如何摆放,以及以多大的尺寸,显示 Camera 所拍摄的视图。2

23、.1.3 实现效果 将此脚本加到 Camera 对象上,选中此对象,即可查看对象上此脚本组件中的各项属性,如图 2-4 所示。图 2-4 对象脚本组件里的各项属性 图 2-5 Game 视图 各属性将设置由 Camera 所拍摄的视图,将放置在由 Main Camera 所拍摄视图中的位置和大小。更形象的说法是,小屏幕将放置于大屏幕的哪个位置,是左上角、右下角,还是中间,且小屏幕的大小是多少,占大屏幕的 50%,还是有固定的大小。运行这个游戏项目,得到的 Game 视图,如图 2-5 所示。一个摄像机所拍摄的视图,放置在了另一个摄像机所拍摄视图的右下角。提示:运行游戏时,Console 视图会

24、显示多条同样的输出信息。如果不想让这个信息出现的话,可以取消 Camera 对象上 Audio Listener 组件的复选即可,如图 2-6 所示。Unity 4.x 游戏开发技巧集锦(内部资料) 版权所有 大学霸 图 2-6 Console 视图上的输出信息,以及取消 Audio Listener 组件的复选 2.2 在多个游戏视图间切换 很多游戏支持玩家切换视角,例如,可以在第一人称视角和第三人称视角间来回切换的穿越火线,如图 2-7 所示。本节就来学习,通过键盘按键,切换游戏视图的方法。在上一节使用的项目的基础上,完成本节的示例演示。图 2-7 第一人称视角与第三人称视角 2.2.1

25、环境准备 继续为项目添加一个摄像机,项目中拥有的 3 个摄像机的名字分别是:Main Camera、Camera1 和 Camera2。禁用后 2 个摄像机的 Camera 和 Audio Listener 组件。在 Unity 里,单击 GameObject|Create Empty 命令,创建一个空游戏对象,并修改它的名字为 Switchboard。此时场景中的所有游戏对象,以及 3 个摄像机的视图如图 2-8 所示。Unity 4.x 游戏开发技巧集锦(内部资料) 版权所有 大学霸 图 2-8 场景中的游戏对象,以及 3 个摄像机的视图 2.2.2 编写脚本 在 Project 视图中,

26、创建一个 C#脚本文件,并命名为 CameraSwitch,打开此脚本文件,并填写如下代码:01 using UnityEngine;02 03 public class CameraSwitch:MonoBehaviour 04 05 public GameObject cameras;06 public string shortcuts;07 public bool changeAudioListener=true;08 /运行游戏时,每一帧都调用此函数 09 void Update()10 11 int i=0;12 for(i=0;icameras.Length;i+)13 14 if

27、(Input.GetKeyUp(shortcutsi)15 SwitchCamera(i);16 17 18 void SwitchCamera(int index)19 20 int i=0;21 for(i=0;icameras.Length;i+)22 23 if(i!=index)24 25 if(changeAudioListener)26 27 camerasi.GetComponent().enabled=false;28 29 camerasi.camera.enabled=false;Unity 4.x 游戏开发技巧集锦(内部资料) 版权所有 大学霸 30 31 else 3

28、2 33 if(changeAudioListener)34 35 camerasi.GetComponent().enabled=true;36 37 camerasi.camera.enabled=true;38 39 40 41 脚本代码,将依据玩家按下的按键(键盘上的 1、2 和 3),决定启用对应摄像机的AudioListener 和 camera 组件,禁用其余两部摄像机的 AudioListener 和 camera 组件。玩家将因此看到不同的游戏视图。2.2.3 实现效果 将脚本加到 CameraSwitch 上,并选中此游戏对象,在 Inspector 视图里查看脚本组件的属

29、性。设置 Cameras 和 Shortcuts 中的 Size 属性为 3,前者依次指定 Main Camera、Camera1和 Camera2,后者依次指定 1、2 和 3,为 Element03 的属性值。如图 2-9 所示。图 2-9 指定脚本组件中各属性的值 在 Unity 里,运行这个游戏,当分别按下键盘上的 1、2 和 3 按键时,游戏中的视图将发生与按键对应的切换,如图 2-10 所示。Unity 4.x 游戏开发技巧集锦(内部资料) 版权所有 大学霸 按下1时按下2时按下3时 图 2-10 按下键盘上的对应按键,所看到的不同游戏视图 2.3 制作镜头光晕效果 镜头光晕(le

30、ns flare)这种效果经常被用在游戏中,尤其是在室外看强光的时候。如图2-11 所示,网游中的人物得到宝贝时,所产生的镜头光晕效果。图 2-11 游戏中的镜头光晕效果 Unity 内置的资源包提供了制作这种效果的资源,本节会直接拿来使用。制作步骤如下:(1)在 Unity 里,单击 Assets|Import Package|Character Controller 命令,导入 Character Controller(角色控制器)资源包。同样的方法,导入 Light Flares(光晕)资源包,如图 2-12所示。Unity 4.x 游戏开发技巧集锦(内部资料) 版权所有 大学霸 图 2

31、-12 导入 Character Controller 和 Light Flares 资源包 图 2-13 为 Main Camera 添加 Mouse Look组件(2)选中 Main Camera,单击 Component|Camera Control|Mouse Look 命令,为其添加Mouse Look 组件,如图 2-13 所示。(3)在 Project 视图里,Standard Assets|Light Flares 路径下,有个名为 Sun 的文件。选中它,在 Inspector 视图里可以看到它引用了名为 50mmflare 的光晕纹理,用鼠标点击这个名称就可以定位到这个纹理

32、的所在位置,如图 2-14 所示。Unity 4.x 游戏开发技巧集锦(内部资料) 版权所有 大学霸 图 2-14 Sun 文件,及其引用的纹理(4)鼠标双击,打开这个名为 50mmflare 的文件,可以看到这个文件包含了光晕效果的各组成部分,如图 2-15 所示。Unity 4.x 游戏开发技巧集锦(内部资料) 版权所有 大学霸 图 2-15 50mmflare 文件中的纹理 图 2-16 设置打开图像文件的指定软件为 PhotoShop 注意:此文件是.psd 为后缀的文件,默认要由 PhotoShop 打开。如果此时电脑中已经安装了 PhotoShop,最好在 Unity 里,单击 E

33、dit|Preferences命令,在弹出的 Unity Preferences对话框中,设置 External Tools 标签下的 Image application 属性为对应的 PhotoShop 软件,如图 2-16 所示。(5)为游戏场景添加 Directional Light 对象,选中它,然后在 Inspector 视图下,修改Light 组件的 Flare 属性为 Sun,如图 2-17 所示。图 2-17 设置 Directional Light 的 Light 组件中的 Flare 属性 图 2-18 镜头光晕效果 6.运行这个游戏,在 Game 视图中移动鼠标,当摄像机

34、的朝向 Directional Light 时,就会看到镜头光晕的效果了,如图 2-18 所示。Unity 4.x 游戏开发技巧集锦(内部资料) 版权所有 大学霸 2.4 制作游戏的快照 有些游戏支持玩家“拍快照”,也就是将游戏的精彩瞬间以图片的形式记录下来的功能。这个功能比较有趣,而且以后的用途也会很广,为此本节打算介绍:截取矩形区域内游戏视图,并将其显示在视图其它区域的方法。具体的操作步骤如下:(1)在 Project 视图里,创建一个 C#脚本文件,并命名为 ScreenTexture。在此脚本中编写如下的代码:01 using UnityEngine;02 using System.C

35、ollections;03 04 public class ScreenTexture:MonoBehaviour 05 06 /公有成员 07 public int photoWidth=50;/矩形的宽度 08 public int photoHeight=50;/矩形的高度 09 public int thumbProportion=25;/截图的显示比例 10 public Color borderColor=Color.white;/矩形框架的颜色 11 public int borderWidth=2;/矩形框的宽度 12 /私有成员 13 private Texture2D te

36、xture;14 private Texture2D border;15 private int screenWidth;16 private int screenHeight;17 private int frameWidth;18 private int frameHeight;19 private bool shoot=false;20 /脚本初始化时,调用此函数 21 void Start()22 23 screenWidth=Screen.width;24 screenHeight=Screen.height;25 frameWidth=Mathf.RoundToInt(screen

37、Width*photoWidth*0.01f);26 frameHeight=Mathf.RoundToInt(screenHeight*photoHeight*0.01f);27 texture=new Texture2D(frameWidth,frameHeight,TextureFormat.RGB24,false);28 border=new Texture2D(1,1,TextureFormat.ARGB32,false);29 border.SetPixel(0,0,borderColor);30 border.Apply();31 32 /运行游戏时,每帧都调用此函数 33 vo

38、id Update()34 35 /鼠标左键按下的时候 36 if(Input.GetKeyUp(KeyCode.Mouse0)37 StartCoroutine(CaptureScreen();38 39 /在 Game 视图上,绘制纹理 40 void OnGUI()41 42 /绘制矩形框的四个边 43 GUI.DrawTexture(Unity 4.x 游戏开发技巧集锦(内部资料) 版权所有 大学霸 44 new Rect(45 (screenWidth*0.5f)-(frameWidth*0.5f)-borderWidth*2,46 (screenHeight*0.5f)-(fram

39、eHeight*0.5f)-borderWidth,47 frameWidth+borderWidth*2,48 borderWidth),49 border,ScaleMode.StretchToFill);50 GUI.DrawTexture(51 new Rect(52 (screenWidth*0.5f)-(frameWidth*0.5f)-borderWidth*2,53 (screenHeight*0.5f)+(frameHeight*0.5f),54 frameWidth+borderWidth*2,55 borderWidth),56 border,ScaleMode.Stre

40、tchToFill);57 GUI.DrawTexture(58 new Rect(59 (screenWidth*0.5f)-(frameWidth*0.5f)-borderWidth*2,60 (screenHeight*0.5f)-(frameHeight*0.5f),61 borderWidth,62 frameHeight),63 border,ScaleMode.StretchToFill);64 GUI.DrawTexture(65 new Rect(66 (screenWidth*0.5f)+(frameWidth*0.5f),67 (screenHeight*0.5f)-(f

41、rameHeight*0.5f),68 borderWidth,69 frameHeight),70 border,ScaleMode.StretchToFill);71 /绘制矩形框中截取到的 Game 视图 72 if(shoot)73 74 GUI.DrawTexture(75 new Rect(76 10,77 10,78 frameWidth*thumbProportion*0.01f,79 frameHeight*thumbProportion*0.01f),80 texture,ScaleMode.StretchToFill);81 82 83 /截取矩形框里的 Game 视图

42、84 IEnumerator CaptureScreen()85 86 yield return new WaitForEndOfFrame();87 texture.ReadPixels(88 new Rect(89 (screenWidth*0.5f)-(frameWidth*0.5f),90 (screenHeight*0.5f)-(frameHeight*0.5f),91 frameWidth,92 frameHeight),93 0,0);94 texture.Apply();95 shoot=true;96 Unity 4.x 游戏开发技巧集锦(内部资料) 版权所有 大学霸 97

43、脚本代码中,40 行的 OnGUI()函数,使用 GUI.DrawTexture()绘制了矩形框,以及矩形框中截取到的游戏视图;84 行的 CaptureScreen()函数,使用 texture.ReadPixels()读取矩形框中的所有像素点,然后存储到 texture 中。触发“拍照”功能的操作是,在 Game 视图中的任意位置,单击鼠标左键,即 36 行代码实现的功能。(2)将脚本 ScreenTexture 赋予 Main Camera,然后选中 Main Camera,在 Inspector 视图里可以设置脚本组件的一些属性,如图 2-19 所示。图 2-19 Main Camer

44、a 上 ScreenTexture 脚本组件的各属性 图 2-20 当前的 Scene 视图(3)为游戏的场景添加一些几何体,并调整它们各自的位置,如图 2-20 所示。(4)运行游戏,当在 Game 视图中的任意位置,单击鼠标左键的时候,可在视图的左上角看到矩形框中截取到的游戏视图,如图 2-21 所示。Unity 4.x 游戏开发技巧集锦(内部资料) 版权所有 大学霸 图 2-21 运行游戏,查看截图的效果 2.5 制作一个望远镜 本节制作的望远镜,在鼠标左键按下时,看到的视图会变大;当不再按下的时候,会慢慢缩小成原来的视图。游戏中时常出现的狙击手就是使用望远镜的一个例子,如图 2-22

45、所示。图 2-22 游戏中狙击手所看到的视图 制作望远镜的过程如下:(1)在 Project 视图里,创建一个 C#脚本文件,命名为 TelescopicView。打开这个脚本文件,并在里面添加下面的代码:01 using UnityEngine;02 using System.Collections;03 Unity 4.x 游戏开发技巧集锦(内部资料) 版权所有 大学霸 04 public class TelescopicView:MonoBehaviour 05 06 /公有成员 07 public float ZoomLevel=2.0f;08 public float ZoomInS

46、peed=100.0f;09 public float ZoomOutSpeed=100.0f;10 /私有成员 11 private float initFOV;12 /脚本初始化时,调用此函数 13 void Start()14 15 /获取当前摄像机的视野范围 16 initFOV=Camera.main.fieldOfView;17 18 /运行游戏时的每一帧,都调用此函数 19 void Update()20 21 /当鼠标左键按下时 22 if(Input.GetKey(KeyCode.Mouse0)23 24 ZoomView();25 26 else 27 28 ZoomOut

47、();29 30 31 /放大摄像机的视野区域 32 void ZoomView()33 34 if(Mathf.Abs(Camera.main.fieldOfView-(initFOV/ZoomLevel)=(initFOV/ZoomLevel)39 40 Camera.main.fieldOfView-=(Time.deltaTime*ZoomInSpeed);41 42 43 /缩小摄像机的视野区域 44 void ZoomOut()45 46 if(Mathf.Abs(Camera.main.fieldOfView-initFOV)0.5f)47 48 Camera.main.fiel

48、dOfView=initFOV;49 50 else if(Camera.main.fieldOfView+(Time.deltaTime*ZoomOutSpeed)=initialFOV/zoomInLimit&zoom=initialFOV/zoomOutLimit)42 43 /改变摄像机视图的大小 44 camera.fieldOfView-=Input.GetAxis(Mouse Y);45 46 47 else 48 49 x+=Input.GetAxis(Mouse X)*xSpeed*0.02f;50 y-=Input.GetAxis(Mouse Y)*ySpeed*0.02f

49、;51 52 y=ClampAngle(y,yMinLimit,yMaxLimit);53 Quaternion rotation=Quaternion.Euler(y,x,0);54 Vector3 position=rotation*new Vector3(0.0f,0.0f,-distance)+Unity 4.x 游戏开发技巧集锦(内部资料) 版权所有 大学霸 target.position;55 /修改旋转度和位置 56 transform.rotation=rotation;57 transform.position=position;58 59 60 /旋转的角度范围 61 st

50、atic float ClampAngle(float angle,float min,float max )62 63 if(angle 360.0f)66 angle-=360.0f;67 return Mathf.Clamp(angle,min,max);68 69 (2)将脚本 InspectCamera 添加到 Main Camera 上,选中后者,在查看器中查看脚本组件中的各属性,如图 2-28 所示。各属性的意义在脚本的 0815 行有注释说明,这里不再重复。注意:需要给 Target 属性赋予一个明确的游戏对象,本示例赋予的是 Capsule(胶囊),如图 2-29 所示。图

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 休闲娱乐

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁