疯狂喷气机

2/3D游戏:2D

辅助插件:原生

游戏制作难度系数:初级

游戏教程网址:http://www.raywenderlich.com/69392/make-game-like-jetpack-joyride-unity-2d-part-1

1、控制摄像机跟随人物移动

    public GameObject targetObject; //目标对象private float distanceToTarget;void Start(){distanceToTarget = transform.position.x - targetObject.transform.position.x; //获取摄像机和对象在横坐标上的的距离
    }void Update(){float targetObjectX = targetObject.transform.position.x;Vector3 newCameraPosition = transform.position;newCameraPosition.x = targetObjectX + distanceToTarget;transform.position = newCameraPosition; //更新摄像机的位置}

2、检测对象是否落地

把floor地板层的Layer设置为Ground,对象的脚下设置一个监测点groundcheck,代码判断是否着地

 public LayerMask groundCheckLayerMask;//设置为地板层public GameObject groundcheck; //监测点bool isTouchGround;
 void CheckGround(){isTouchGround = Physics2D.OverlapCircle(groundcheck.transform.position, 0.1f, groundCheckLayerMask);}
Physics2D.OverlapCircle用法如下:
static Collider2D OverlapCircle(Vector2 point, float radius, int layerMask = DefaultRaycastLayers, float minDepth = -Mathf.Infinity, float maxDepth= Mathf.Infinity);
point:圆的中心
radius:圆的半径
layerMask:只在某些层过滤检测碰撞器
minDepth:只包括Z坐标(深度)大于这个值的对象
maxDepth:只包括Z坐标(深度)小于这个值的对象
描述:检测一个碰撞器是否与落在一个圆形区域(里面)。
圆形是由一个在世界空间中的中心点和它的半径定义出来的。层遮罩可以用于指定检测特定某些图层的对象。
虽然Z轴与2D的渲染或碰撞无关,但是你可以使用minDepth和maxDepth参数去排除一些对象基于他们的Z轴。如果有好几个碰撞器都落在(重叠)检测区域,那么最小的Z坐标的那个碰撞器将会被返回。如果没有碰撞器在区域中就返回Null了。
还要注意这个函数会分配内存给返回的Collider2D对象。在你需要频繁做这个检测的时候,可以使用OverlapCircleNonAlloc这个函数去避免这些开销。
还有这些: OverlapArea, OverlapPoint, OverlapCircleAll, OverlapCircleNonAlloc.
3、设置粒子逐渐消失的

在粒子系统组件中搜索名为Color over Lifetime 的部分。通过选中这一分组名称左边的白色复选框来启用它。展开这一分组。
注:现在它仅仅是纯白色,如图2,而且由于你清楚的看到了火焰的橙色,这看起来可能有些奇怪。然而,颜色在终其生命周期中可以表现为不同的方式。以初始值为基础它与自身进行了相乘,而不是通过设置颜色来改变。由于白色不管自身相乘多少次还是会得到原始的颜色,所以你看到的总是橙色。但是你可以改变颜色的生命周期为一个梯度,设置最末端的颜色透明度为0.这一的话粒子就会逐渐的消失。Color over Lifetime中点击white color box,打开梯度编辑,如图3。选择top slider on the right,改变Alpha值为0。如图4,然后关闭梯度编辑即可!效果图如下:

  particleSystem.enableEmission 设置是否产生粒子颗粒
particleSystem.emissionRate 获取或设置粒子产生的频率(float)

4、顶点捕捉特性
对于屏幕中的每个背景元素,你可以基于每一个元素的大小来进行定位,但是移动对象的时候,如果要一直计算这些值的话就不是很方便了。
作为替代,你可以使用Unity的顶点捕捉特性,它可以让你很容易的就定位彼此相邻的元素。下面让我们看看它使多容易:

使用顶点捕捉的时候,你只需要在选择后按住V键,但是要记住是在移动游戏对象之前。

使用定点捕捉的更多细节

选择你要移动的房间背景对象,不要忘了释放鼠标键,然后按住V键,移动小飞鼠到你需要使用为支点的角落。

5、设置粒子不被UI遮挡

代码动态为粒子指定图层为最上层的图层,并且sortingOrder要最大即可!

particleSystem.renderer.sortingLayerName = "Default";
particleSystem.renderer.sortingOrder = 2;

6、添加动态背景

参考:https://www.youtube.com/watch?v=9bhkH7mtFNE

(1)首先你需要添加2个Quads,一个用来作为背景,一个用来作为前景。        

你可能会好奇为什么这里使用Quad,而不是典型的Sprite?是由于你不能改变Sprite的图像wrappinp模式。至少在这里不行。然后你需要改变wrapping模式来确保当我们图片不断向右移动时,材质是无缝的进行连接。你需要为每一个Quad设置一个材质,不用移动Quads来模拟移动,你只要在Quad内移动材质,对于背景和前景层采用不同的速度。

(2)将前景图和背景图两者的Texture Type从Sprite改为Texture,随后,将Wrap Mode属性设置为Repeat,点击应用。

(3)创建另一个Camera(Orthographic size:3.2),重命名为ParallaxCamera,主Camera被保留用来跟踪mouse。这个新的Camera将被用来渲染交差背景,并且不会移动。

(4)创建Quads,创建两个Quad对象,通过选择GameObjet\Create Other\Quad。命名第一个Quad为parallaxBackground,然后第二个为ParallaxForeground。拖动两个Quads到ParallaxCamera,添加他们为子项。为两个Quads附加相应的背景图和前景图,选择parallaxBackground,Scale为(11.36,4.92,0)。注意:你使用这个scale,因为背景图的尺寸为1136*492px。前景图片也这样设置。

(5)然后,在Hierarchy中选择parallax Foreground。你会看到一个Mesh Render的组件被添加了进来。点击Shader下拉框,选择Unlit\Transparent。在parallaxBackground上重复以上步骤.

(6)让Texture移动起来,你不需要移动Quads。取而代之的是,你需要移动Quad所附加的Textures,通过改变材质的偏移量。因为你设置了WrapMode至Repeat属性,它会自动连接。注意:并不是所有图片都适用这种情况,这些背景图片设计的时候就可以被用来相互连接。也就是说,如果你将背景图片水平串起来,图像的左边和右边会很自然的连接在一块。创建一个命名为ParallaxScroll的C#脚本,并将它与ParallaxCamera关联起来。

在MonoDevelop中打开该ParallaxScript,然后添加以下实例变量:

public Renderer background;public Renderer foreground;public float backgroundSpeed = 0.02f;public float foregroundSpeed = 0.06f;

这些Render变量会保持每个到Quads中Mesh Render组件的引用,这样你就可以调整他们的Texture属性。这个backgroundSpeed和foregroundSpeed定义了每个背景的速度。

然后在Update中添加以下代码:

float backgroundOffset = Time.timeSinceLevelLoad * backgroundSpeed;float foregroundOffset = Time.timeSinceLevelLoad * foregroundSpeed;background.material.mainTextureOffset = new Vector2(backgroundOffset, 0);foreground.material.mainTextureOffset = new Vector2(foregroundOffset, 0);

这个代码会定期更新Quad中texture的偏移量,也就是移动它们。它们的速度将会不同,因为这个脚本中用了backgroundSpeed和foregroundSpeed作为参数去计算偏移量。

切换回Unity,然后在Hierarchy中选择ParallaxCamera。拖拽ParallaxBackground Quad到ParallaxScroll脚本中的Background字段,以及ParallaxForeground到Foreground字段。

(7)修正Camers的次序。在Hierarchy中选择ParallaxCamera,然后在Inspector中,寻找Camera组件,然后将Depth属性设置为-2,注意:ParallaxCamera的Depth属性应该比Main Camera的Depth小,所以检查你的Main Camera Depth,然后据此保证Parallax Camera更小一些。不过,随后运行游戏,你会发现你从窗户看不到视差滚动的背景。

为了解决这个问题,在Hierarchy中选择Main Camera,然后将Clear Flags设置为Depth Only。这样它就不会清除由Parallax Camera绘出的背景。运行游戏,现在你可以从窗户中看到外面的风景了!

(8)当老鼠死后停止背景滚动,在MonoDevelop中打开ParallaxScroll脚本,然后添加以下公共偏移变量:public float offset = 0;

你会使用它,而不是Time.timeSinceLevelLoad,所以在Update中,使用以下代码替换掉你计算偏移量的代码。

float backgroundOffset = offset * backgroundSpeed;float foregroundOffset = offset * foregroundSpeed;

现在,打开MouseController脚本,然后添加以下公共变量:public ParallaxScroll parallax;然后添加以下代码到FixedUpdate的末尾:

parallax.offset = transform.position.x;这样子,你就可以使用Mouse的Position来作为偏移量而不是时间。

转载于:https://www.cnblogs.com/MrZivChu/p/RocketMouse.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

elementui表格-改变某一列的样式

cellStyle({ row, column, rowIndex, columnIndex }) {if (columnIndex 0) {// 指定列号return ‘padding:0‘} else {return ‘‘} },

正则表达式基础(一)

From: http://www.usidcbbs.com/read-htm-tid-1457.html Perl 中的正则表达式 正则表达式是 Perl 语言的一大特色,也是 Perl 程序中的一点难点,不过如果大家能够很好的掌握他,就可以轻易地用正则表达式来完成字符串处理的任务&#xff0…

vue element项目常见实现表格内部可编辑功能

目录 前言 正文 1.简单表格行内内部可编辑 2. 数据从后端取得表格行内可编辑 3.批量表格整体的可编辑 结语 前言 后台系统都是各种表格表单编辑,整理了下常见的几种实现表格编辑的方式,希望有用。使用框架:vueelement 表格行内内部可编辑 数…

Yii2.0 技巧总结

View部分 1. 使用ActiveField中的hint生成提示文字 <? $form->field($model, freightAddedFee)->textInput()->hint(大于0的整数) ?> 2. 文本框添加placeholder属性&#xff0c;其实这个本来就是html5带的属性。 <? $form->field($model, mobile, $inp…

【JavaScript】appendChild一个的注意点之会删除原dom树节点

最近在研究学习vue原理&#xff0c;其中使用createDocumentFragment()方法&#xff0c;是用来创建一个虚拟的节点对象&#xff0c;那问题来了&#xff0c;创建了虚拟dom树&#xff0c;且最后只渲染了虚拟dom树里面的节点&#xff0c;那原dom树的节点去哪里了&#xff0c;查阅了…

正则表达式图书

From: http://www.usidcbbs.com/read-htm-tid-1457-page-2.html 网文 vs 书藉 只要是知道“正则”这个词的&#xff0c;上网搜集个把资料&#xff0c;应该就不是问题吧。我获得正则消息的网絡渠道有这样几个&#xff0c;以质量从高到低排序&#xff1a;dilicious标签&#xff0…

Spring.NET学习笔记12——面向切面编程(基础篇) Level 300

AOP即面向切面编程(Aspect Oriented Programming的缩写)&#xff0c;是OOP(面向对象编程)的一种延续形式。是通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术&#xff0c;它从一个不同于OOP的角度来看待程序的结构&#xff1a;OOP将…

vue-cli3使用svg图标的详细步骤

1.安装依赖 npm install svg-sprite-loader -D2.在vue.config.js里添加配置 module.exports{chainWebpack: config > {const svgRule config.module.rule("svg"); svgRule.uses.clear();svgRule.use("svg-sprite-loader").loader("svg-sprite…

python模拟登陆163邮箱并获取通讯录

From: http://hi.baidu.com/fc_lamp/blog/item/2466d1096fcc532de8248839.html python模拟登陆163邮箱并获取通讯录 #-*- coding:UTF-8 -*-import urllib,urllib2,cookielibimport xml.etree.ElementTree as etree #xml解析类class Login163:#伪装browserheader {User-Agent:…

【BZOJ】【3850】ZCC Loves Codefires

贪心 就跟NOIP2012国王游戏差不多&#xff0c;考虑交换相邻两题的位置&#xff0c;对其他题是毫无影响的&#xff0c;然后看两题顺序先后哪个更优。sort即可。 WA了一次的原因&#xff1a;虽然ans开的是long long&#xff0c;但是在这一句:anstime*a[i].k;时&#xff0c;还是需…

Element-UI中关于table表格的那些骚操作

最近的项目中使用到element-ui组件库&#xff0c;由于做的是后台管理系统&#xff0c;所以经常需要操作表格&#xff0c;编辑样式的过程中遇到一些问题&#xff0c;官网针对table给出了很多的api&#xff0c;自己可以自定义&#xff0c;基本能满足产品需求&#xff0c;但是没有…

Qt Creator 使用技巧

From: http://www.developer.nokia.com/Community/Wiki/Qt_Creator_%E4%BD%BF%E7%94%A8%E6%8A%80%E5%B7%A7 Qt Creator 使用技巧 简介 Qt Creator 作为Qt 开发的IDE&#xff0c;支持Qt 开发&#xff0c;及QML开发&#xff0c;能很好的发挥Qt 跨平台的特点&#xff0c;这里列举一…

前端利用CryptoJS进行AES对称加解密(16进制编码)

加密相关JS https://www.npmjs.com/package/crypto-js 引入JS 使用示例&#xff1a; 附上原文代码方便大家自由使用 //加密 let key CryptoJS.enc.Utf8.parse(123456789qwertyu);//密钥必须是16位&#xff0c;且避免使用保留字符 let encryptedData CryptoJS.AES.encry…

触发器三(行级DML触发器)(学习笔记)

行级DML触发器 每当一条记录出现更新操作时进行触发操作定义时要定义FOR EACH ROW 使用":old.字段"和":new.字段"标识符 No.触发语句 :old字段:new字段1INSERT 未定义&#xff0c;字段内容为NULLINSERT操作结束后&#xff0c;为增加数据值2UPDATE更新数据…

用Python和Pygame写游戏-从入门到精通(1)

From: http://eyehere.net/2011/python-pygame-novice-professional-1/ 博客刚开&#xff0c;打算做一个Pygame的系列&#xff0c;翻译自Will McGugan的《Beginning Game Development with Python and Pygame –From Novice to Professional》&#xff0c;有兴趣的朋友可以搜一…