提交 f22d0dde 编写于 作者: 恬静的小魔龙's avatar 恬静的小魔龙

更新文章

上级 d7c5ab73
#### liberxue.github.io demo [查看](https://liberxue.github.io/)
`Jekyll Themes`
----------
### Jekyll轻量级极简博客
#### 第一步是点击[fork](https://github.com/Liberxue/liberxue.github.io#fork-destination-box)
##### 第二步: 修改_config.yml 中的url 为您的域名
#### OK 好了 就这么简单
#### 我不要任何版权也不需要您在捐款,帮忙star下 一个🌟 谢谢 😄
- [x] 自动生成标签
- [x] 自动生成json搜索
- [x] 自适应模板
- [x] 自动生成feed.xml
- [x] 自动生成分页
- [x] 修改_config.yml 的links 为您的菜单
- [x] 修改_config.yml 的paginate 为您的按照多少页分页
![uiliberxue](https://raw.githubusercontent.com/Liberxue/liberxue.github.io/master/thumbnails/ui.jpg)
----------
![博客搜索](https://raw.githubusercontent.com/Liberxue/liberxue.github.io/master/thumbnails/01.gif)
轻量级 最小blog
第一步: 点击[fork](https://github.com/Liberxue/liberxue.github.io#fork-destination-box)
----
![fork操作](https://raw.githubusercontent.com/Liberxue/liberxue.github.io/master/thumbnails/02.gif)
第二步: 修改_config.yml 中的url 为您的域名
![修改_config.yml 中的url 为您的域名](https://raw.githubusercontent.com/Liberxue/liberxue.github.io/master/thumbnails/04.gif)
* [提交Issues](https://github.com/Liberxue/liberxue.github.io/issues)
* [发邮件](mailto:liberxue@gmail.com)
* [Twitter](https://twitter.com/liberxue).
---
layout: post
category: Unity3D-Game
title: 【Unity3D开发小游戏】《文字冒险游戏》Unity开发教程
tagline: by 恬静的小魔龙
tag: Unity3D
---
## 一、基本程序设计(故事卡)
游戏会为玩家呈现一个“故事卡”。故事卡上包含一些文字,其中一部分是用于描述玩家当前的状态,另外一部分是在当前情况下玩家可以做出的一系列选择。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190628142702319.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
根据玩家的不同选择,剧情也会按照不同的分支向前发展,并持续出现新的卡片与选择,直到最终的卡片不再有新的选择,则游戏结束。
制作一张“故事卡”很简单。根据上诉需求,我们新建StoryCard脚本,脚本代码如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190628142929365.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
StoryCard在检视面板中显示如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190628142937751.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
您需要在StoryCard脚本的Description字段中输入卡片描述(玩家可以在屏幕上看到的文本)、玩家在选项按钮上看到的文字(目前该程序最多支持4个按钮)、以及按下对应按钮后跳转的故事卡(即为分支,稍后会介绍)。
StoryCard脚本还包含两个故事状态属性“States to Set True”以及“States to Set False”,这两个属性分别有何作用呢?下面就来看看。
## 二、故事状态与分支
其实整个系统可以完全使用“故事卡”来制作,但仅使用“故事卡”的话,游戏流程就变得很枯燥无味。假设有某个选项,玩家点击了该按钮,但该选项所导致的后果并不会立即在剧情中呈现,而是在随后的剧情中缓慢展开。假使仅使用“故事卡”,就需要立即从该选项开始出现分支,并且直至该选项导致的最终影响出现之前,都要在所有剧情分支上重复同样的步骤。
因此,我们需要一个更好的解决办法。
前面提出了“故事状态”的概念用于存储状态值,这其实只是一个布尔值容器。卡片在被激活时可以根据需要对特定的状态进行赋值。新建StoryState脚本,代码如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190628143027659.png)
StoryState脚本在检视面板中显示如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190628143039293.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
该方法解决了记住状态值的问题,下面通过“剧情分支(Story Branch)”来应用这些状态值。一个分支会引用一个状态以及剧情发展的两个不同方向(可以是“故事卡”或者剧情分支),被引用的状态值用于决定剧情走向何种结果。
## 三、游戏管理器
这个管理器用于承载整个剧情的发展,其作用是将目前的“故事卡”状态更新到UI上,在不同按钮按下时做出对应的动作,并引导剧情前进。这个管理器也需要一个“故事卡”来作为故事的开端。以下是GameManager脚本的内容:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190628143059991.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190628143111344.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
其中SetCurrentStoryItem函数用于设置当前显示的剧情节点。SetCardDetails函数用于设置“故事卡”的细节,例如剧情描述,选项按钮及描述等。UpdateButtons函数用于更新所有选项按钮及其响应事件。
GameManager脚本在检视面板中显示如下图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190628143123199.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
---
layout: post
category: Unity3D-Game
title: 【Unity3D开发小游戏】《太空射击游戏》Unity开发教程
tagline: by 恬静的小魔龙
tag: Unity3D
---
@[TOC](《太空射击游戏》游戏教程)
## 一、前言
我们的2D太空射手将受到古老的街机游戏的启发,每个人在成长过程中都很喜欢这些游戏。
我们将利用物理等各种不同的统一特征(包括刚体和对撞机)、动画(Mecanim),脚本(C#),预制板,阴影和Sprite Editor。游戏艺术将非常容易创建与我们的绘画工具的选择。
## 二、版本
Unity 5.0.1f1
## 三、正文
### 1.相机调整
首先,我们将选择主照相机在层次性然后去找探长。我们会改变背景技术颜色改为黑色,并将大小调整为10:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190911174234439.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
### 2.创建背景
**空间纹理**
我们的背景应该包括一个恒星的图像,滚动向下滚动,所以它似乎是在太空飞行的球员。我们首先画一个256 x 512PX空间背景在我们的绘图工具中的选择:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190911174254302.png)
注意:右击图像,选择但作为.。,导航到项目的资产文件夹并将其保存到新的Sprits文件夹。
一旦保存到我们的项目中,我们就可以在项目区:
![Background in Project Area](https://img-blog.csdnimg.cn/2019091117430656.png)
之后,我们可以修改导入设置在检验员:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190911174319158.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
注意:通常我们会设置纹理类型到Sprits一个2D游戏。但是用UV映射只为纹理,不是为了精灵..精灵将是像素完美的,但是滚动它们需要一个着色机对于本教程来说,这太复杂了。
**将其添加到Quad中**
好吧,让我们把背景添加到我们的游戏中。我们会选择GameObject->3D Object->Quad从顶部菜单为了给我们的游戏添加一个四边形:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190911175608795.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
注意:我们使用Quad从三维物体菜单在2D游戏中,因为纹理(而不是Sprite)可以添加到它。
现在我们来看一下检验员和比例尺它的高宽比和我们的背景纹理是一样的:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190911181921217.png)
我们也会将它重命名为背景技术:
![Quad Renamed](https://img-blog.csdnimg.cn/20190911181926858.png)
并移除Mesh Collider因为我们不需要它(这是3D游戏):
![Remove Mesh Collider](https://img-blog.csdnimg.cn/20190911181933653.png)
之后,我们可以从项目区在背景技术:
![Quad with Default Material](https://img-blog.csdnimg.cn/20190911181945784.png)
如果我们按下Play然后我们可以看到我们的空间背景,它仍然非常黑暗:
![Dark Background](https://img-blog.csdnimg.cn/20190911181953746.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
**未点亮的着色器**
背景是黑暗的,因为它当前使用标准只有当场景中有灯光时,着色器才会使事情变得明亮。我们不会使用任何类型的灯光或阴影,所以让我们选择Unlit>Texture着色器:
![Background with Unlit Texture Shader](https://img-blog.csdnimg.cn/20190911182010634.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
如果我们按下Play再一次,我们可以在不太暗的情况下看到背景恒星:
![Unlit Background ingame](https://img-blog.csdnimg.cn/20190911182039549.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
**UV映射**
如果我们仔细观察一下阴影的特性,我们就可以看到我们的紫外线了。Tiling和Offset在此:
![Background UV Properties](https://img-blog.csdnimg.cn/2019091118204911.png)
随意使用这些属性,看看它们如何改变背景。Tiling会重蹈覆辙偏移量会改变纹理的位置。如果我们设置Y偏移量对于像这样的价值观0.1, 0.2, 0.3等等,我们已经可以看到滚动发生了。
当然,为了达到滚动效果,我们不希望每秒手动更改偏移量60次。我们会写一个Script处理好了。让我们点击添加组件按钮,然后选择新脚本,说出来UVScroll并选择CSHARP关于语言:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190911182148294.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
团结创造了新的C#脚本在我们项目区并将其添加到四角..让我们创建一个新的剧本我们的文件夹项目区并将脚本移动到其中:
![UVScroll Script in Project Area](https://img-blog.csdnimg.cn/20190911182154598.png)
现在,我们可以双击脚本以便打开它:
```csharp
using UnityEngine;
using System.Collections;
public class UVScroll : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}
```
我们不需要启动或者更新函数,让我们移除它们。修改UV映射在最新进展函数在完成所有其他计算之后。我们还将添加一个公共变量,让我们稍后修改检查器中的滚动速度:
```csharp
using UnityEngine;
using System.Collections;
public class UVScroll : MonoBehaviour {
public Vector2 speed;
void LateUpdate() {
GetComponent<Renderer>().material.mainTextureOffset = speed * Time.time;
}
}
```
注意:虽然看起来很简单,但是这里有很多事情发生在幕后。首先,我们使用了矢量2为了我们速度变量,以确保我们可以修改x(横向)和y(垂直)速度。我们使用GetComponent<Renderer>()访问呈现器组件。使用GetComponent<Renderer>().Matter确保UV偏移量不会被永久修改,就像手工修改它时的情况一样。相反,通过使用GetComponent<Renderer>().Matter统一创建材料的运行时副本,并在游戏停止后删除它。此外,我们使用主要纺织品属性修改主纹理的UV偏移量。然后我们用时间,时间若要实现滚动效果,请执行以下操作:时间,时间是游戏开始后的时间。既然这段时间总是平稳地增长,我们不妨把它用于滚动。而且我们把时间乘以速度让它慢下来或者让它变快。因为我们速度变量是矢量2,在将它与之相乘后,它仍将是一个时间,时间..所以最后我们得到了一个新的矢量2将用于紫外偏移.
让我们保存脚本,然后查看检验员再来一次。现在我们可以修改速度了。我们将设置y速度(用于垂直滚动)以我们所希望的速度离开x速度(水平滚动)在…0因此,它根本不水平滚动:
![UV Scroll in Inspector with Speed](https://img-blog.csdnimg.cn/20190911182227670.png)
**滚动空间纹理**
如果我们按下Play然后我们可以看到我们的背景向下滚动,就像我们在太空中飞行一样:
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC1zcGFjZS1zaG9vdGVyLWdhbWUvYmFja2dyb3VuZF9zY3JvbGxpbmcuZ2lm)
这个效果很好,但是我们会更进一步实施。视差滚动给它增加更多的深度。
. . .未完待续
---
layout: post
category: Unity3D-Game
title: 【Unity3D开发小游戏】《炸弹人游戏》Unity开发教程
tagline: by 恬静的小魔龙
tag: Unity3D
---
## 一、前言
我们的炸弹人游戏灵感源于1983年的原始炸弹人,听起来像一个很古老的游戏,但是确实是一个很有趣的游戏。
我们将使用几个有趣的Unity功能,如刚体,Colliders 和Sprite Editor。我们还将学习如何正确地使用Unity的强大的Mecanim动画系统。
## 二、版本
Unity 5.0.1f1
## 三、让我们开始吧
### 背景色
我们在Hierarchy面板中选择主照相机,在Inspector面板 ,改变一下Background颜色。最初的炸弹人游戏使用绿色背景颜色。#397 c00 (r=57,G=124,B=0)..我们可以用那种颜色,或者任何我们喜欢的颜色。我们还将调整大小属性,以便以后游戏看起来足够大:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190911173242230.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
### 创建级别
**不可摧毁的块**
在我们的游戏中,我们将有几种类型的积木。首先,我们需要一个无法摧毁的街区。我们将使用如下工具创建32 x 32 px纹理:
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC1ib21iZXJtYW4tZ2FtZS9ibG9ja191bmRlc3Ryb3lhYmxlLnBuZw?x-oss-process=image/format,png)
好的,让我们在我们的项目区:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190911173320768.png)
我们可以修改块的导入设置:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190911173335559.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
注:Pixels Per Unit单位像素价值32这意味着32 x 32像素将适合在游戏世界的一个单位。我们将使用这个值的所有纹理,因为轰炸机将是32 x 32 Px稍后,我们希望他是一个准确的单位在游戏世界。
之后,我们把Block图片从Project拖入到Hierarchy面板中:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190911173404956.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190911173449645.png)
**块物理**
现在,块只是游戏世界中的一个图像,一个纯粹的视觉效果,仅此而已。我们希望它成为物理世界的一部分,这样轰炸机就不能穿过它。我们可以通过选择Box Collider 2D:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190911173512230.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
现在,街区是物理世界的一部分,就像一堵墙。
这里还有一件事要做。在我们的游戏中,我们将有两种类型的积木:可摧毁的和不可摧毁的积木。我们需要一种方法来找出某个块是否可以被摧毁。有很多方法可以这样做,比如编写脚本或使用标记。我们将保持简单,并使用Static属性用于不可销毁的事物:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190911173528520.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
注意:我们通常使用Static属性来告诉Unity,某些游戏对象永远不会更改。通过这种方式,Unity可以对它们进行优化。而且,由于我们的不可摧毁的块永远不会改变,使其静态才对。
**可摧毁块**
好的,让我们在游戏中再加一个街区。和以前一样,我们将从画一个开始:
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC1ib21iZXJtYW4tZ2FtZS9ibG9ja19kZXN0cm95YWJsZS5wbmc?x-oss-process=image/format,png)
我们将使用以下方法导入设置为此:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190911173653212.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
然后我们会把它再一次拖到Hierarchy,然后选择添加组件->Physics 2D->Box Collider 2D:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190911173733472.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
**使用块创建级别**
现在我们可以使用我们的两个块来创建一个简单的级别。我们可以在Hierarchy然后选择Duplicate:
我们可以复制块的频率随我们的意愿,并将他们的位置,以创建一个简单的水平。我们只需记住将每个街区放置在圆角坐标处,就像(1, 2)而不是像(1.002, 1.9998).
以下是一个完整级别的样子:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190911173814663.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
注意:我们也将所有的区块分组成一个空的。砌块GameObject,我们可以在上面的菜单中创建GameObject游戏对象->创建空..但这是可选的,因为它只是为了保持我们的层次结构更干净一点。
### 炸弹人
好吧,让我们来创造我们的炸弹人角色。我们的角色将能够无所事事,向左,向右,上下移动。我们需要5个动画来使这成为可能。听起来会有很多工作要做,但像往常一样,团结会为我们处理所有复杂的事情。
. . .未完待续
---
layout: post
category: Unity3D-Game
title: 【Unity3D开发小游戏】《VVVVVV游戏》Unity开发教程
tagline: by 恬静的小魔龙
tag: Unity3D
---
## 一、前言
本教程将展示如何在特里·卡瓦纳赫的启发下,制作一款简单而令人上瘾的平台游戏。VVVVV游戏。这个概念很简单,用户必须通过水平行走或倒转重力来控制一个小个子通过某种奇怪的迷宫。
我们的游戏很容易做。它只需要一个水平图像,一个尖峰图像,一个检查点图像和一个播放器图像。
像往常一样,一切都会尽可能简单地解释,这样每个人都能理解它。
以下是最后一场比赛的预览:
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC12dnZ2dnYtc3R5bGUtcGxhdGZvcm1lci1nYW1lL3VuaXR5X3Z2dnZ2dl9zdHlsZV9wbGF0Zm9ybWVyLmdpZg)
## 二、版本
==Unity5.0.0f4==
## 三、正文
### 1.摄像机设置
如果我们选择主照相机在层次性然后我们可以设置背景色黑色并调整大小如下图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912163508831.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
### 2.平面
**绘制平面**
让我们抓住我们的绘图工具的选择,并创造一个平面。我们将保持它的简单,并创建一个大的图像,添加一些背景模式,然后剪出一些区域供玩家走来走去:
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC12dnZ2dnYtc3R5bGUtcGxhdGZvcm1lci1nYW1lL2xldmVsX2JsdWUucG5n?x-oss-process=image/format,png)
注意:右击图像,选择另存为.。,导航到项目的资产文件夹并将其保存到新的Sprites文件夹。
**导入平面**
现在我们可以选择项目区:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912163726528.png)
然后在Inspector修改导入设置:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912163800884.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
注:Pixels Per Unit设成16这意味着16x16像素将适合在游戏世界的一个单位。我们将使用这个值作为我们所有的纹理,因为V尖峰将是16x16像素,这应该是一个单位的游戏世界。
之后,我们可以从项目区进入在Hierarchy为了把它添加到游戏世界中:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912163901907.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
**平面物理**
目前,我们的形象实际上只是游戏世界中的一个形象。我们可以看到它,但它什么也做不了,球员将无法在上面行走。我们将添加一个对撞机为了让它成为物理世界的一部分,这样玩家就可以在上面行走并与之碰撞。
我们可以通过选择添加组件->物理二维->多边形对撞机2D在Inspector:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912163921700.png)
如果我们看看场景然后我们就能看到结果了。团结只是试图将多边形围绕在我们复杂的水平形状上:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912163941761.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
问题是,多边形只是一个估计,它还不是我们想要的。现在,只有我们用红色突出显示的区域实际上是可步行的:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912164007709.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
Unity允许我们通过单击以下按钮修改多边形碰撞器:
![在这里插入图片描述](https://img-blog.csdnimg.cn/201909121641019.png)
之后,我们可以修改场景就像这样:
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC12dnZ2dnYtc3R5bGUtcGxhdGZvcm1lci1nYW1lL2xldmVsX2JsdWVfZWRpdGNvbGxpZGVyX2luc2NlbmUuZ2lm)
让我们修改整个多边形,直到它完全符合我们的水平:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912164612662.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
现在水平物理是非常好的。
### 3.V钉
好吧,让我们增加我们的难度,增加红色V尖峰。我们将首先绘制一幅16x16px图像:
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC12dnZ2dnYtc3R5bGUtcGxhdGZvcm1lci1nYW1lL1YucG5n?x-oss-process=image/format,png)
注意:右击图像,选择另存为。并将其保存在项目的资产/Sprites文件夹。
我们将使用以下方法导入设置对于图像:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912164734602.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
让我们从项目区进入场景把它放在(-2, -12, 0):.
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912164751181.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
==注意:如果我们把所有的V型尖峰定位在圆角位置上,看起来真的很好,比如(-2, -12, 0)而不是像(-2.03 -11.99, 0).==
让我们再一次加入对撞机,使V物体 Spike 成为物理世界的一部分。这一次我们不需要多边形对撞机,因为它的形状非常简单。相反,我们会选择添加组件->物理二维->盒对撞机2D在检验员然后使用以下属性:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912165028221.png)
现在我们可以右击V尖峰Hierarchy并选择Duplicate:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912165047169.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
...未完待续
---
layout: post
category: Unity3D-Game
title: 【Unity3D开发小游戏】《超级马里奥游戏》Unity开发教程
tagline: by 恬静的小魔龙
tag: Unity3D
---
## 一、前言
超级马里奥游戏于1985年为任天堂娱乐系统发布,成为有史以来最受欢迎的电子游戏之一。
当涉及到好的游戏设计时,这个游戏是一个很好的例子。在本教程中,我们将创建游戏的一个小测试场景,并尽可能地关注核心机制。我们将使用Unity3D引擎
和往常一样,每件事都会一步地解释,并且尽可能简单,这样每个人都能理解它。
## 二、版本
==Unity5.0.0f4==
## 三、正文
### 1.主照相机设置
现在我们可以选择主照相机在Hierarchy使用典型的蓝色背景色 (红色=107, 绿色=140, 蓝色=255),调整大小而位置所以游戏看上去就像:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912151509687.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
### 2.艺术风格
为了防止版权问题,我们不能在本教程使用原超级马里奥图片。相反,我们将画我们自己的Sprites,使他们看起来像原来的游戏。
在我们开始之前,让我们创建一个新的Sprites文件夹中的项目区:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912151631824.png)
== 这就是我们把Sprite放在这里的地方。这是一个花哨的游戏开发词,用来表示图像。)==
### 3.石头
**石头的图片**
我们首先画一个16x16像素石材绘图工具中的图像,如:
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC1zdXBlci1tYXJpby1icm9zLWdhbWUvc3RvbmUucG5n?x-oss-process=image/format,png)
==注意:右击图像,选择另存为。并将其保存在项目的Assets/Sprites文件夹。==
现在,我们可以在项目区然后在Inspector修改导入设置:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019091215254274.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
注:Pixels to Unit值为16意味着16个像素的大小等于游戏世界中一个单元的大小。我们将使用这个值作为我们所有的纹理。因此,如果我们想将两个16x16雪碧放置在一起,我们可以使用以下位置(1, 0), (2, 0)诸若此类。
现在我们可以从项目区进入场景为了把它添加到游戏世界中:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912152625134.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
让我们在Hierarchy选择这个物体,在Inspector并将其坐标改为(0, 0, 0):
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912152718940.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
==注意:我们想制作一个2D游戏,所以我们并不真正关心Z坐标。它将是0对于我们游戏中的所有对象(除了相机)。在2D游戏中我们只关心X(水平坐标)和Y(垂直坐标)。==
**分选层Sorting Layer**
因为我们是在一个二维游戏世界,会有一些情况下,几个图像是画在对方之上,例如,当马里奥站在灌木丛前。我们总是希望灌木丛在后台,这样马里奥就会被画在前面。(否则我们就看不到他了).
让我们告诉Unity,石头总是应该在幕后。这就是分选层我们可以更改石头的排序层,如果我们查看检查器中的Sprite Renderer组件:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912152749307.png)
让我们选择添加排序层.。从分选层列表,然后添加Background层,并将其移动到第一个位置,如下所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912152805653.png)
==注意:Unity从上到下画层,因此背景中的任何内容都将位于列表的顶部。==
现在我们可以重新选择石头并分配我们的新Background排序层:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912152832516.png)
**石物理**
现在的石头只是一个形象,仅此而已。这不是物理世界的一部分,马里奥将无法在上面行走或任何东西。我们需要添加一个Collider2D让它成为物理世界的一部分,这意味着事物将与石头相撞,而不是跌落或穿过石头。
我们可以添加一个Collider2D通过在Inspector选择添加组件->物理2D->Box Collider 2D:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019091215342937.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
现在石头是物理世界的一部分,就这么简单。
**添加更多的石头**
现在我们可以添加更多的石头到我们的场景。我们去看看Hierarchy在其中,我们右键单击当前的石头,然后选择Duplicate:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912153602121.png)
我们将把新的石头放置在(x=1,y=0):
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912153753787.png)
让我们重复这个工作流程,直到我们有两排21块石头(y=0处一行,y=-1处一列)..重要的是始终将它们放置在圆角坐标上,如(2, 0)从来没有(2.003, 0.005)..如果我们按下Play:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019091215380931.png)
## 3.灌木丛和云
就像在原来的超级马里奥兄弟游戏,我们也将添加一些灌木丛和云的背景。与往常一样,我们将从绘制图像开始:
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC1zdXBlci1tYXJpby1icm9zLWdhbWUvY2xvdWQucG5n?x-oss-process=image/format,png)
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC1zdXBlci1tYXJpby1icm9zLWdhbWUvY2xvdWRzLnBuZw?x-oss-process=image/format,png)
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC1zdXBlci1tYXJpby1icm9zLWdhbWUvYnVzaC5wbmc?x-oss-process=image/format,png)
==注意:右击每个图像,选择但作为.。把它们全部保存在项目中资产/Sprites文件夹。==
我们将使用以下方法导入设置对于所有图像:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912153943862.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
现在我们可以把Sprites 从项目区拖入到场景中,把他们安置在我们想让他们去的地方:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912154015384.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
因为它们是背景的一部分,所以我们在Hierarchy然后分配Background再次排序层:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912154035759.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
注意:如前所述,背景排序层确保这些对象总是绘制在其他所有内容的后面。换句话说,马里奥总是会被吸引到他们面前。
我们的团结超级马里奥兄弟。游戏慢慢开始看起来像一个!
## 5.管道
**图片**
这些绿色管道是超级马里奥兄弟公司的重要组成部分,所以让我们画一个:
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC1zdXBlci1tYXJpby1icm9zLWdhbWUvcGlwZS5wbmc?x-oss-process=image/format,png)
==注意:右击图像,选择但另存为.。并将其保存在项目的Assets/Sprites文件夹。==
下面是导入设置我们的管道:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912155328231.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
注意:即使它是一个32x32像素的Sprites,我们仍然使用相同的像素转到单位时时刻刻都很有价值。
现在我们可以把Sprites从我们的项目区进入场景..我们将在世界的右侧增加两条管道:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912155358785.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
**管物理**
管道应该是物理世界的一部分,这意味着马里奥不应该直接穿过它们。相反,他应该与他们碰撞。要使它们成为物理世界的一部分,我们所要做的就是在Hierarchy选择物体然后在Inspector单击添加组件->物理二维->Box Collider 2D..如果我们看看场景然后,我们可以看到绿色对撞机盒周围的每一个管道:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912155515448.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
我们可以看到,管道的下部比我们的Collider要薄一点:
这没什么大不了的,但让我们慢慢来,用一个巧妙的小技巧来创造一个完美的对Collider。一种选择是只使用多边形Collider,这会带来一些负面影响。
更优雅的解决方案(至少在这种情况下)将另一个Collider添加到我们的管道中,然后对齐第一个Collider,使其适合管道的上部和第二个Collider,使其适合管道的下部:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019091216205562.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
现在管道的物理是完全真实的。像这样的小调整才能让游戏感觉正确晚些时候。
. . .未完待续
---
layout: post
category: Unity3D-Game
title: 【Unity3D开发小游戏】《青蛙游戏》Unity开发教程
tagline: by 恬静的小魔龙
tag: Unity3D
---
## 一、前言
我们的教程将解释如何在Unity中制作2D青蛙游戏。弗罗格早在1981年就发行了,但由于它的街机性质,它在今天仍然很有趣,并且很容易在Unity中开发。
这将是如此容易,我们将几个像素艺术纹理,只有几种颜色。
像往常一样,一切都会尽可能简单地解释,这样每个人都能理解它。
下面是最后游戏的一个小预览:
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC1mcm9nZ2VyLWdhbWUvdW5pdHlfZnJvZ2dlci5naWY)
## 二、版本
==Unity5.0.0f4==
## 三、正文
### 1.摄像机设置
如果我们选择主照相机在层次性然后我们可以设置背景色黑色并调整大小而位置如下图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912165832223.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
### 2.背景设置
我们将选择一个简单的和未来派的艺术风格,我们的游戏,只有两种颜色。背景将由几个方块和线组成,它们都是1像素宽。我们将使用以下背景图像,但可以随意使用以下工具绘制自己的Paint.net:
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC1mcm9nZ2VyLWdhbWUvYmFja2dyb3VuZC5wbmc?x-oss-process=image/format,png)
==注意:右击图像,选择另存为。,导航到项目的资产文件夹并将其保存到新的Sprites文件夹。==
让我们在项目区:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912165929371.png)
然后看一看检验员在那里我们可以更改导入设置若要调整大小和压缩,请执行以下操作:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019091216594456.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
注:Pixels Per Unit设为16这意味着16x16像素将适合在游戏世界的一个单位。我们将使用这个值的所有纹理,因为青蛙将是16x16像素后(这应该是一个单位在游戏世界)。
好了,现在我们可以从项目区进入层次性为了让它成为游戏世界的一部分:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912170303813.png)
.如果我们按下Play那么我们已经可以看到它的名字了:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912170318850.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
注:底部的橙色方块是车辆行驶的街道。中间的绿地就像草,青蛙可以站在那里不用担心。上面的黑色区域将是水,这是青蛙必须跳到平台上才能通过它的地方。顶部的绿地将是必须达到的目标。
我们正在制作一个2D游戏,背景应该总是画在青蛙和汽车后面。为了实现这一点,我们可以用分类层 (用于更复杂的游戏)或者层序财产。我们来看看检验员改变背景层序财产-1:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912170330451.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
==注意:Unity将游戏对象从最低值绘制到最高值,因此前景中的任何内容都应该具有比其他对象更高的值。==
### 4.创造青蛙
**青蛙形象**
没有青蛙就没有青蛙。我们将制作一个大的图像与所有的动画切片在其中。我们需要下列动画:
- 走上去
- 走下
- 向右走
- 向左走
==注意:每个动画将由两个切片组成。如果我们在一个循环中播放这两个切片,那么我们将有一个动画。==
随意画任何你喜欢的青蛙。下面是包含所有动画切片的青蛙图像:
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC1mcm9nZ2VyLWdhbWUvZnJvZy5wbmc?x-oss-process=image/format,png)
注意:右击图像,选择另存为。并将其保存在项目的资产/Sprites文件夹。
我们将使用以下方法导入设置为此:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912170426399.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
**青蛙图像切片**
我们的青蛙图像实际上是由几个小片组成的动画。我们可以通过Sprite Mode选择 Multiple。之后,我们可以单击Sprite Editor按钮:.
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912170651332.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
然后我们会选择切片并将类型设置为格网使用以下设置,然后按下切片按钮:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912170726209.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
之后,我们可以关闭切片编辑器并按下应用在未导入设置警告。
我们刚刚将青蛙图像分割成几个16×16像素的图像,我们现在可以在项目区 (他们是青蛙形象的孩子):
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912170736626.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
...未完待续
---
layout: post
category: Unity3D-Game
title: 【Unity3D开发小游戏】《宝石迷阵游戏》Unity开发教程
tagline: by 恬静的小魔龙
tag: Unity3D
---
## 一、前言
让我们在Unity做一个宝石风格的游戏。对于那些从未听说过的人来说,宝石迷阵是一个三回合制的游戏,在2001年发布,后来复制为流行的糖果粉碎游戏。(这也使得这是一个Unity糖果粉碎教程).
我们将专注于游戏的核心机制。我们将实现一个8x8网格的宝石,可以互换。目标是始终匹配至少三个相同类型的宝石,无论是水平的还是垂直的。
游戏将用少于140行代码实现。和往常一样,每件事都会尽可能简单地解释,这样每个人都能理解它。
## 二、资源下载
图片资源:
源文件:
## 三、正文
**注意:Unity版本 5.0.0f4**
### 1、摄像机调整
如果我们选择主照相机在层次性然后我们可以设置背景色若要黑色,请调整大小而位置如下图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190904173154560.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
### 2、宝石
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC1tYXRjaC0zLWdhbWUvYmx1ZS5wbmc?x-oss-process=image/format,png)
导入到我们项目中,Sprites文件夹:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190904173335914.png)
然后修改设置:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190904173427983.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
注:Pixels Per Unit:16这意味着16x16像素将适合在游戏世界的一个单位。我们将把这个价值用于我们所有的宝石。其他的值如Filter Mode主要是为了平衡压缩和质量。
**创建游戏对象**
将宝石拖入到场景中:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190904173530960.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
注:我们项目区的宝石图像只是一个图像,仅此而已。但是一旦我们把它拖到场景中,它就变成了一个游戏对象,它有一个位置,一个旋转,一个比例尺,一个渲染器和其他各种我们可以添加到其中的组件。
**创建Gem.cs脚本**
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190904173610456.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
将脚本拖入到Scripts文件夹中(要养成规范分类的习惯):
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190904173706697.png)
编辑Gem.cs脚本:
```csharp
using UnityEngine;
using System.Collections;
public class Gem : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}
```
我们不需要启动函数,所以让我们删除它:
```csharp
using UnityEngine;
using System.Collections;
public class Gem : MonoBehaviour {
// Update is called once per frame
void Update () {
}
}
```
让我们添加一个函数,让我们知道两个GEM是否是同一类型的。如果我们能把两个蓝宝石和==,因为它们是不同的游戏对象,所以它们永远不会是平等的。我们只想知道它们是否属于同一种宝石类型,或者换句话说,它们是否使用相同的Sprites:
```csharp
public bool sameType(Gem other) {
return GetComponent<SpriteRenderer>().sprite == other.GetComponent<SpriteRenderer>().sprite;
}
```
注意:如果这还不清楚,想象两颗宝石在一排。如果我们能把它们和==那他们就是不平等因为它们是不同的游戏对象,在不同的位置等等。然而,如果我们将它们与我们的同类型功能,那么它们将是平等如果它们都是蓝色的宝石,或者都是红色的宝石。他们会不平等如果其中一个是蓝色另一个是红色..当一条线上的三颗宝石相等时,它们就是匹配的,可以从游戏中移除。
**创建宝石的预制体**
将宝石拖入到我们的Project面板中的Prefabs文件夹中:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190904173924103.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
然后,我们就可以在场景中删除blue对象了,因为我们可以在脚本中实例化对象
**红宝石**
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC1tYXRjaC0zLWdhbWUvcmVkLnBuZw?x-oss-process=image/format,png)
设置属性:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190904174021961.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
然后也把它拖入到场景中,添加Gem.cs脚本,并且设置成预制体:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190904174105376.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190904174109714.png)
**其他宝石**
![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC1tYXRjaC0zLWdhbWUvYnJvd24ucG5n?x-oss-process=image/format,png)![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC1tYXRjaC0zLWdhbWUvZ3JlZW4ucG5n?x-oss-process=image/format,png)![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC1tYXRjaC0zLWdhbWUvcGluay5wbmc?x-oss-process=image/format,png)![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC1tYXRjaC0zLWdhbWUvd2hpdGUucG5n?x-oss-process=image/format,png)![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC1tYXRjaC0zLWdhbWUveWVsbG93LnBuZw?x-oss-process=image/format,png)
我们将其他的宝石也重复这个流程做一遍:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019090417425180.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
### 3、网格
让我们添加一个新脚本叫做Grid.cs,挂载到Main Camera物体上
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190904174355700.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3E3NjQ0MjQ1Njc=,size_16,color_FFFFFF,t_70)
将Grid.cs脚本拖入到Scripts文件夹中(规范分类啊喂!):
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019090417450244.png)
让我们编辑Grid.cs脚本:
```csharp
using UnityEngine;
using System.Collections;
public class Grid : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}
```
我们可以删除启动函数,因为我们不需要它:
```csharp
using UnityEngine;
using System.Collections;
public class Grid : MonoBehaviour {
// Update is called once per frame
void Update () {
}
}
```
**网格尺寸**
让我们添加一个宽度和高度变量以控制水平和垂直宝石的数量:
```csharp
using UnityEngine;
using System.Collections;
public class Grid : MonoBehaviour {
// Grid size
public static int w = 8;
public static int h = 8;
// Update is called once per frame
void Update () {
}
}
```
注:w平均宽度和h意味着身高。我们会用8对于这两种情况,最后我们得到了一个8×8的网格。我们做了两个变量公共静电这样就可以通过以下方式从任何其他脚本中访问它们Grid.w或Grid.h
未完待续。。。
......@@ -14,17 +14,26 @@ links:
- name: 首页
url: /
external: false
- name: Unity3D日常开发
url: /NavigationBar/u3daily
- name: 日常
url: /pages/u3daily
external: false
- name: 插件
url: /pages/u3plugin
external: false
- name: 游戏
url: /pages/u3game
external: false
- name: 演示
url: /pages/u3demo
external: false
- name: 归档
url: /NavigationBar/archives
url: /pages/archives
external: false
- name: 标签
url: /NavigationBar/tags
url: /pages/tags
external: false
- name: 关于
url: /NavigationBar/about
url: /pages/about
external: false
# ------------ CONFIGURABLE END ------------
......
......@@ -2,7 +2,7 @@
<div class="lists-navigator clearfix">
<ol class="page-navigator">
<li class="current">
<a href="/?liberxue" data-hover="首页">
<a href="" data-hover="首页">
<span>首页</span>
</a>
</li>
......@@ -28,7 +28,7 @@
{% if i == 1 %}
<a href="/?liberxue" data-hover="{{i}}">{{i}}</a>
{% else %}
<a href="/liberxuepage{{i}}?liberxue" data-hover="{{i}}">{{i}}</a>
<a href="/liberxuepage{{i}}" data-hover="{{i}}">{{i}}</a>
{% endif %}
</li>
{% endfor %}
......@@ -36,18 +36,17 @@
{% if paginator.page == paginator.total_pages %}
<span>&raquo;</span>
{% else %}
<a href="/liberxuepage{{ paginator.next_page }}?liberxue" data-hover="&raquo;">
<a href="/liberxuepage{{ paginator.next_page }}" data-hover="&raquo;">
<span>&raquo;</span>
</a>
{% endif %}
</li>
<li>
<a href="/liberxuepage{{paginator.total_pages}}?liberxue" data-hover="末页">
<a href="/liberxuepage{{paginator.total_pages}}" data-hover="末页">
<span>末页</span>
</a>
</li>
<li class="current">
<span>第{{paginator.page}}页 / 共{{paginator.total_pages}}页</span>
</ol>
</div>
......@@ -10,7 +10,7 @@
<body class="" gtools_scp_screen_capture_injected="true">
<header id="header" class="header bg-white">
<div class="navbar-container">
<a href="/?liberxue" title="访问 {{site.title }}" class="navbar-logo"> <img src="{{ site.url }}/style/images/logo.png" alt="{{ site.title }}"> </a>
<a href="/?home" title="访问 {{site.title }}" class="navbar-logo"> <img src="{{ site.url }}/style/images/logo.png" alt="{{ site.title }}"> </a>
<div class="navbar-menu">
{% for link in site.links %}
<a href="{% unless link.external %}{{ site.url }}{% endunless %}{{ link.url }}">{{ link.name }}</a>
......
......@@ -12,10 +12,10 @@
<body class="bg-grey" gtools_scp_screen_capture_injected="true"><div id="MathJax_Message" style="display: none;"></div>
<header id="header" class="header bg-white">
<div class="navbar-container">
<a href="/?liberxue" title="访问 {{ site.title }}" class="navbar-logo"> <img src="{{ site.url }}/style/images/logo.png" alt="{{ site.title }}"> </a>
<a href="" title="访问 {{ site.title }}" class="navbar-logo"> <img src="{{ site.url }}/style/images/logo.png" alt="{{ site.title }}"> </a>
<div class="navbar-menu">
{% for link in site.links %}
<a href="{{ link.url }}?liberxue" title="访问 {{ link.name }}" data-hover="{{link.name}}">{{ link.name }}</a>
<a href="{{ link.url }}" title="访问 {{ link.name }}" data-hover="{{link.name}}">{{ link.name }}</a>
{% endfor %}
</div>
<div class="navbar-search" onclick="">
......@@ -30,7 +30,7 @@
<span class="icon-menu cross"><span class="middle"></span></span>
<ul>
{% for link in site.links %}
<li><a href="{{ link.url }}?liberxue" title="访问 {{ link.name }}" data-hover="{{link.name}}">{{ link.name }}</a></li>
<li><a href="{{ link.url }}" title="访问 {{ link.name }}" data-hover="{{link.name}}">{{ link.name }}</a></li>
{% endfor %}
</ul>
</div>
......
---
layout: post
category: Unity3D-Game
title: 【Unity3D开发小游戏】《愤怒的小鸟》Unity开发教程
tagline: by 恬静的小魔龙
tag: Unity3D
layout: blog
istop: true
u3game: true
category: Unity3D
title: 【Unity3D开发小游戏】愤怒的小鸟
date: 2020-08-21 21:09:00
background-image: https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC1hbmdyeS1iaXJkcy1nYW1lL3VuaXR5X2FuZ3J5YmlyZHMuZ2lm
tags:
- Unity3D
- Unity3D开发小游戏
---
@[TOC](《愤怒的小鸟》开发教程)
......
---
layout: post
category: Unity3D-Game
title: 【Unity3D开发小游戏】《打砖块》Unity开发教程
tagline: by 恬静的小魔龙
tag: Unity3D
layout: blog
istop: true
u3game: true
category: Unity3D
title: 【Unity3D开发小游戏】打砖块游戏
date: 2020-08-21 21:09:00
background-image: https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC1hcmthbm9pZC1nYW1lL2Fya2Fub2lkX3ByZXZpZXcucG5n
tags:
- Unity3D
- Unity3D开发小游戏
---
## 一、前言
......
---
layout: blog
istop: true
u3game: true
category: Unity3D
title: 【Unity3D开发小游戏】数字华容道
date: 2020-08-21 21:09:00
......
---
layout: post
category: Unity3D-Game
title: 【Unity3D开发小游戏】《Flappy Bird》Unity开发教程
tagline: by 恬静的小魔龙
tag: Unity3D
layout: blog
istop: true
u3game: true
category: Unity3D
title: 【Unity3D开发小游戏】Flappy Bird
date: 2020-08-21 21:09:00
background-image: https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC1mbGFwcHktYmlyZC1nYW1lL29ic3RhY2xlX21vdmluZy5naWY
tags:
- Unity3D
- Unity3D开发小游戏
---
## 一、前言
......
此差异已折叠。
此差异已折叠。
---
layout: post
category: Unity3D-Game
title: 【Unity3D开发小游戏】《2D光圈》Unity开发教程
tagline: by 恬静的小魔龙
tag: Unity3D
layout: blog
istop: true
u3game: true
category: Unity3D
title: 【Unity3D开发小游戏】2D光圈游戏
date: 2020-08-21 21:09:00
background-image: https://imgconvert.csdnimg.cn/aHR0cHM6Ly9ub29idHV0cy5jb20vY29udGVudC91bml0eS8yZC10cm9uLWxpZ2h0Y3ljbGVzLWdhbWUvdW5pdHlfdHJvbl9saWdodGN5Y2xlcy5naWY
tags:
- Unity3D
- Unity3D开发小游戏
---
## 一、前言
......
---
layout: post
category: Unity3D-Game
title: 【Unity3D开发小游戏】《乒乓球游戏》Unity开发教程
tagline: by 恬静的小魔龙
tag: Unity3D
layout: blog
istop: true
u3game: true
category: Unity3D
title: 【Unity3D开发小游戏】2D乒乓球游戏
date: 2020-08-21 21:09:00
background-image: https://img-blog.csdnimg.cn/20191224182820413.gif
tags:
- Unity3D
- Unity3D开发小游戏
---
## 一、前言
......
此差异已折叠。
......@@ -5,7 +5,7 @@ u3daily: true
category: Unity3D
title: Unity3D鼠标经过物体时变颜色,离开时恢复
date: 2020-08-21 20:09:00
background-image: http://cdn.qq764424567.top/%E5%B0%8F%E9%AD%94%E9%BE%992.gif
background-image:
tags:
- Unity3D
- Unity3D日常开发
......
---
layout: blog
banana: true
istop: true
book: true
u3daily: true
category: Unity3D
title: Unity3D中控制人物移动
date: 2020-08-21 20:09:00
background-image: http://cdn.qq764424567.top/%E5%B0%8F%E9%AD%94%E9%BE%992.gif
background-image:
tags:
- Unity3D
- Unity3D日常开发
......
此差异已折叠。
此差异已折叠。
---
title: 那些年走过的地方去过路过的美景
description: "分享那些年走过的地方去过路过的美景"
title: 日常
description: "Unity3D日常开发"
---
<div class="main-content index-page clearfix ">
......@@ -29,8 +29,8 @@ description: "分享那些年走过的地方去过路过的美景"
</div>
</div>
</div>
{% endif %}
{% endif %}
{% endfor %}
</div>
</div>
{% include pagination.html %}
\ No newline at end of file
</div>
---
title: 那些年走过的地方去过路过的美景
description: "分享那些年走过的地方去过路过的美景"
title: 演示
description: Unity3DDemo演示
---
<div class="main-content index-page clearfix ">
<div class="post-lists">
<div class="post-lists-body">
{% for posts in site.posts %}
{% if posts.road%}
{% if posts.u3demo%}
<div class="post-list-item">
<div class="post-list-item-container">
<div class="item-thumb bg-{{posts.background }}" style="background-image:url('{{posts.background-image }}');"></div>
......@@ -33,4 +33,4 @@ description: "分享那些年走过的地方去过路过的美景"
{% endfor %}
</div>
</div>
{% include pagination.html %}
\ No newline at end of file
---
title: 看过的书|正在看的书
description: "分享正在看和看过想看的一些书籍"
title: 游戏
description: Unity3D小游戏开发
---
<div class="main-content index-page clearfix ">
<div class="post-lists">
<div class="post-lists-body">
{% for posts in site.posts %}
{% if posts.book%}
{% if posts.u3game%}
<div class="post-list-item">
<div class="post-list-item-container">
<div class="item-thumb bg-{{posts.background }}" style="background-image:url('{{posts.background-image }}');"></div>
......@@ -22,9 +22,9 @@ description: "分享正在看和看过想看的一些书籍"
<div class="item-title"><a href="{{ posts.url }}">{{ posts.title }}</a></div>
<div class="item-meta clearfix">
<div class="item-meta-ico bg-ico-book" style="background: url('../style/images/bg-ico.png') no-repeat;background-size: 40px auto;"></div>
<div class="item-meta-cat">
<a href="category/thoughts/index.html" title="访问 {{ posts.category }}" data-hover="{{ posts.category }}">{{ posts.category }}</a>
<a href="category/thoughts/index.html" title="访问 {{ posts.date | date: "%Y"}}" data-hover="{{ posts.date | date: "%F %H:%M:%S "}}">{{ posts.date | date: "%F %H:%M:%S "}}</a></div>
<div class="item-meta-cat">
<a href="category/thoughts/index.html">{{ posts.category }}</a>
<a href="category/thoughts/index.html">{{ posts.date | date: "%F %H:%M:%S "}}</a></div>
</div>
</div>
</div>
......@@ -33,4 +33,3 @@ description: "分享正在看和看过想看的一些书籍"
{% endfor %}
</div>
</div>
{% include pagination.html %}
\ No newline at end of file
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册