Unity开发实战—— 2D项目1 - Ruby‘s Adventure 游戏世界中各个对象的交互(3-1)

Posted 杨枝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity开发实战—— 2D项目1 - Ruby‘s Adventure 游戏世界中各个对象的交互(3-1)相关的知识,希望对你有一定的参考价值。

CSDN话题挑战赛第2期
参赛话题:面试宝典

文章目录

1)食用指南

①前言
本项目的完整开发流程在Unity官方项目的教学文档中编写了详细的教程文档,但是因为官方文档距离现在已经有一段时间了,个别地方有错误或者读者在使用自己机器上的Unity 编辑器进行操作的过程中,仍然遇到了零零散散的问题,无法再和官方教程相对应,本博客是对官网提供的项目的再补充以及个人心得复盘和经验分享。

本系列博客是来源于官方教程但是最终绝对会高于官方教程,让读者综合官方教程以及我自己的升华,能够独立开发出一个比官方教程更加完整可行的游戏。
最终的开发结果,使用资源也会开源在GitHub以及Gitee。

②官方教程地址
官方文档 —— 6、世界交互 - 阻止移动
官方文档 —— 7、世界交互 - 可收集对象
官方文档 —— 8、世界交互 - 伤害区域和敌人

③如何处理本系列博客和官方教程之间的关系

个人建议是先大致浏览本系列专栏的博客,对注意事项和要点有个初步印象,再跟着官方文档逐步操作

因为本系列博客是对官方教程的修订,补充,升华,而且本系列博客的内容篇幅不会特别冗长,完整看完大概需要5 — 7 分钟。
假如只看文章的目录,留意需要订正的地方,那么大致只是需要1分钟左右。

2)具体步骤详细剖析

前排温馨小提示:
第六节 《世界交互 - 可收集对象》的教程中,几乎不需要再补充,可以完完整整跟着操作。因为我之前自行添加了和规则瓦片相关的知识,故我也只是补充规则瓦片的一点知识。

2.1)《6-1.什么是物理系统?》注意事项

Unity已经内置了一个模拟现实生活中物体移动或者碰撞的物理系统,我们需要做的是通过挂接2D 精灵的刚体物理组件Rigidbody 2D来使用这套物理系统。

记住:为避免对我们游戏中的每个对象进行成本高昂的数学运算,Unity 仅对附有 Rigidbody 2D 组件的游戏对象执行这些计算。

① Rigidbody2D —— 2D游戏中,主要用于维护物理系统
脚本API —— Rigidbody2D

2.2)《6-7.解决Ruby的旋转+9.解决抖动问题》常识积累

② BoxCollider2D —— 2D游戏中,处理轴对齐的矩形碰撞体的相关碰撞事件
脚本API —— BoxCollider2D

2.3)《6-12.添加瓦片地图碰撞》再补充

教程中详细讲述了经过分割之后(没有挂接生成规则的瓦片)如何在为整体添加Tilemap Collider 2D组件之后,再手动筛选出不需要碰撞的瓦片并去除相应碰撞的操作。

我这里会补充规则瓦片地图的碰撞去除 —— 核心思想是将瓦片精灵挂接的Collider取消

① 对于规则瓦片 —— 将 Collider 挂接的组件从精灵Sprite 改为 None

更改完的效果:

② 对于规则覆盖瓦片 —— Rule Override Tile 是无法修改精灵的碰撞模式,建议删除重制

③ 对于规则覆盖瓦片 —— Advance Rule Override Tile 可以自行修改碰撞模式

2.3)《6-13.优化瓦片地图碰撞体》常识积累

这个优化确实很实在的,我最初是漏做了,然后瓦片地图会出现类似这种的情况

至于假如出现瓦片地图在一闪一闪的的情况。

原因的详细解释在世界设计 - 瓦片地图的第六点《6.使瓦片精灵适应网格》。

简单来说,原因是这种的:

在需要用于绘制地图的瓦片的Inspector窗口中,有Pixels Per Unit属性。我们想要完美填充,主要需要对这里进行设置。

Pixels per Unit主要是告诉Unity,在地图中,一个单位(场景绘制中的一个方格)内应该填充的像素的数量。比如我上图中写的64,那么就是一个方格,给64个像素。

那么Pixels per Unit这一栏的数值应该怎么设置了,这里需要分情况讨论。
① 对于单一瓦片精灵 —— 高度/宽度像素是多少,就设置为多少
提供的瓦片精灵的规格一般都是2的n次幂,比如16 x 16 、 32 x 32 或者 64 x 64,或者 256 x 256。
此时,规格是多少,就设置为多少。比如我举例的瓦片精灵规格是64 x 64 ,那么我在Pixels per Unit这一栏就设置为64,就能够实现完美的填充。

② 对于瓦片集 —— 需要计算

目前我总结的计算式子如下:
64/192 = (Pixels per Unit这一栏的数值)/瓦片集像素

目前测试出来的效果;

2.4)《7-4.添加函数来更改生命值》钳制功能积累

③ Mathf.Clampc ——钳制功能
脚本API —— 常用数学函数的集合Mathf

currentHealth = Mathf.Clamp(currentHealth + amount, 0, maxHealth);

钳制功能 (Clamping) 可确保第一个参数(此处为 currentHealth + amount)绝不会小于第二个参数(此处为 0),也绝不会大于第三个参数 (maxHealth)。
因此,Ruby 的生命值将始终保持在 0 到 最大生命值maxHealth 之间。

2.5)《7-7.什么是触发器?》触发器概念理解

在游戏中,一般是碰撞某个物体,最终实现加血或者扣血等情况,正是利用触发器实现的。


触发器时一种特殊的碰撞体,它并不会阻止我们的移动的,但是Unity附带的物理系统会检查游戏角色是否和该碰撞体发生触碰。倘若发生触碰,就会处理触碰之后的逻辑,一般是增加游戏角色的血量。

	//处理碰撞的逻辑
	void OnTriggerEnter2D(Collider2D other)
    
        Debug.Log($"此时与加血草莓触发器发生碰撞的对象是other");
    

④ OnTriggerEnter2D —— 当另一个对象进入附加到该对象的触发碰撞体时调用
脚本API ——OnTriggerEnter2D
当另一个2D碰撞器 other 和 挂接包含OnTriggerEnter2D方法的脚本的游戏对象(草莓) 发生碰撞时,调用这个方法。

⑤ Destroy—— 销毁 GameObject、组件或资源
脚本API ——Destroy

Destroy 是 Unity 的一个内置函数,可销毁作为参数传递给这个函数的任何对象;在此示例中为gameObject。即,将脚本附加到的游戏对象(可收集的生命值包)。

6、世界交互 - 阻止移动以及7、世界交互 - 可收集对象的补充这里就结束啦~。对于自己心目中的游戏地图,在这里开始设计是最好的。

3)总结

向游戏对象添加碰撞体 —— 重要
添加瓦片地图碰撞 —— 重要
游戏角色碰撞时候发生旋转以及抖动问题的解决 —— 了解
文章中提到的5个常用API —— 积累

[Python3网络爬虫开发实战] 1.5.4-RedisDump的安装

RedisDump是一个用于Redis数据导入/导出的工具,是基于Ruby实现的,所以要安装RedisDump,需要先安装Ruby。

1. 相关链接

2. 安装Ruby

有关Ruby的安装方式可以参考http://www.ruby-lang.org/zh_cn/documentation/installation,这里列出了所有平台的安装方式,可以根据对应的平台选用合适的安装方式。

3. gem安装

安装完成之后,就可以执行gem命令了,它类似于Python中的pip命令。利用gem命令,我们可以安装RedisDump,具体如下:

 

 

执行完毕之后,即可完成RedisDump的安装。

4. 验证安装

安装成功后,就可以执行如下两个命令:

 

 

如果可以成功调用,则证明安装成功。

以上是关于Unity开发实战—— 2D项目1 - Ruby‘s Adventure 游戏世界中各个对象的交互(3-1)的主要内容,如果未能解决你的问题,请参考以下文章

猿创征文 |游戏开发实战——2D项目1 - Ruby‘s Adventure控制游戏角色移动(1-2)

Unity5新特性----实战2D游戏

《Unity 2D与3D手机游戏开发实战》上架了。

《Unity 2D与3D手机游戏开发实战》上架了。

《Unity 2D与3D手机游戏开发实战》上架了。

游戏开发实战Unity使用ShaderGraph制作一个Loading水球(能量球 | UI | 2D | 特效 | URP)