以简单的方式讲述游戏开发思路,暂时没有实践,如有错误,欢迎各位大佬指错

关卡数据保存方式

数据保存我选用json,可读性强,解析快

消消乐物体处理方式

消消乐物体我将以预制体的方式使用(把物品拖到Asset文件夹即为预制体)

游戏每一关初始化

初始化要做的事情:

  1. 把关卡或计时等信息与UI对象相关联

  2. 通过Json数据以及Asset存的预制体实例化初始消消乐地图

玩家游戏中点击屏幕响应

  1. 判断点击是否为一个可被消除物品

    method: 可通过Physics2D.OverlapPointAll判断点击是否包含碰撞体数组,因为返回的是碰撞体数组,所以物品身上必须加上一个碰撞体(额,为此如果数量多了可能影响游戏性能)如果还不明白的话可以看我的这篇文章2d点击获取物体

  2. 如果点击物品可被消除,则递归检查该物品周围是否有相同物品,

  3. 如果有相同的物品即可消除,否则返回null

点击屏幕后

  1. 如果有物体被删除则利用递归判断哪里下面的物体被删除,

  2. 然后根据情况往下移动格子,注意每次移动都要递归来判断,哪里可以继续移动格子

  3. 移动完成后返回一个bool值true,接着继续在消消乐地图上方生成物体,然后移动到指定空格子中,这里要用遍历,对地图内所有物体进行检查,空的就是要生成并移动到的位置

在这里给大家推荐一个插件,叫DOTween,他可以对物体进行移动,旋转,缩放,渐变等,非常方便,在使用的时候只需要引入DG.Tweening命名空间即可使用

另外还有一个DOTween Pro我就不给大家介绍了,它就是在DOTween 的基础上增加了在编辑器中编辑动画组件,而不是在代码中修改,这也是为了技美着想吧!

当然如果你不想看DOTween文档,想快速了解,也可以看我的这篇文章关于DOTween的使用

游戏一些细节效果

  1. 当物体可以被摧毁那么把可摧毁物体聚集到屏幕中间旋转,随之往四面八方移动渐隐

  2. 玩家每次点击屏幕不管点到哪里都会在点击位置生成粒子特效

  3. 每次点击都会播放音效

    example:

这是一个用于播放音效的单例

using System.Collections;
using System.Collections.Generic;
using UnityEngine; #region 佛祖保佑
/*
_ooOoo_
o8888888o
88" . "88
(| -_- |)
O\ = /O
____/`---'\____
.' \\| |// `.
/ \\||| : |||// \
/ _||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\---/'' | |
\ .-\__ `-` ___/-. /
___`. .' /--.--\ `. . __
."" '< `.___\_<|>_/___.' >'"".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `-. \_ __\ /__ _/ .-` / /
======`-.____`-.___\_____/___.-`____.-'======
`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
佛祖保佑 永无BUG
*/
#endregion public class SoundManager : MonoBehaviour
{
public static SoundManager Instance;
public string[] String_soundsField;
public AudioClip[] AudioClip_soundsField;
private AudioSource audioSource;
private Dictionary<string, AudioClip> Dictionary_sounds = new Dictionary<string, AudioClip>();
// Start is called before the first frame update
void Start()
{
if (!Instance) Instance = this;
DontDestroyOnLoad(transform); audioSource = transform.GetChild(0).GetComponent<AudioSource>(); SoundsSetUp();
} private void SoundsSetUp()
{
Dictionary_sounds.Clear();
for (int i = 0; i < String_soundsField.Length; i++)
{
Dictionary_sounds.Add(String_soundsField[i], AudioClip_soundsField[i]);
}
} public void PLaySound(string soundField)
{
if (Dictionary_sounds.ContainsKey(soundField))
audioSource.PlayOneShot(Dictionary_sounds[soundField]);
}
}

使用时只需在外部调用

SoundManager.Instance.PlaySound("AudioClipName");
  1. 在一个游戏管理类中设定一个整数Score,以及每一关Score线,当超过分数线比如及格,优秀,满分,就会播放不同的音效,或接着生成烟花粒子,并且同时在屏幕中心生成一个五角星,然后快速移动到屏幕上方设定的每一关星星数量那里,如果按及格优秀,满分来分 分数线那么星星满星为三颗

  2. 因为游戏内基本都是用的热更新,不过我今天再介绍一个游戏内部更新的方式,需要你对Android交互有一定的了解

Unity 消消乐开发思路的更多相关文章

  1. Unity 3D游戏-消消乐(三消类)教程和源码

    Unity 消消乐教程和源码 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Start Game -- ...

  2. 消消乐、candy crush类三消游戏程序逻辑分析

    最近在开发一款类似消消乐的三消游戏,在碰到实现斜方向下落的时候卡住了很长时间.好几天没有思路,原本的思路是一次性预判多个宝石的一连串运动路径,运用缓动运动队列来实现宝石运动路径,例如 下落->滑 ...

  3. net.sz.framework 框架 ORM 消消乐超过亿条数据排行榜分析 天王盖地虎

    序言 天王盖地虎, 老婆马上生孩子了,在家待产,老婆喜欢玩消消乐类似的休闲游戏,闲置状态,无聊的分析一下消消乐游戏的一些技术问题: 由于我主要是服务器研发,客户端属于半吊子,所以就分析一下消消乐排行榜 ...

  4. ACM_开心消消乐

    开心消消乐 Time Limit: 2000/1000ms (Java/Others) Problem Description: 大白最近喜欢上了开心消消乐,于是英语基础好的他准备让课文中英语句子也来 ...

  5. Unity3D_(游戏)甜品消消乐03_游戏UI设计

    甜品消消乐01_游戏基础界面 传送门 甜品消消乐02_游戏核心算法 传送门 甜品消消乐03_游戏UI设计    传送门 (源码在文章最下面~) 实现过程 游戏界面UI 分数与时间的UI显示 有关游戏U ...

  6. Unity3D_(游戏)甜品消消乐01_游戏基础界面

    甜品消消乐游戏 (脚本源码在游戏UI设计最下方) 三消游戏,存在L型消除有一点小Bug,当甜品在饼干附近消除时会清除饼干 饼干作为游戏障碍物时不可移动的,多块饼干并排时会挡住甜品掉落 发现消除类游戏的 ...

  7. [LeetCode] Candy Crush 糖果消消乐

    This question is about implementing a basic elimination algorithm for Candy Crush. Given a 2D intege ...

  8. RSP小组——消消乐

    RSP小组--消消乐 团队所有博客总结 1.团队第一周作业 2.团队第二周作业 3.RSP小组--团队冲刺博客一 4.RSP小组--团队冲刺博客二 5.RSP小组--团队冲刺博客三 6.RSP小组-- ...

  9. PHP实现开心消消乐的算法示例

    本文主要介绍了关于PHP如何实现我们大家都知道的开心消消乐的算法,分享PHP教程出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 一.需求描述:      1.在一个8*8的矩阵方格中随机 ...

随机推荐

  1. [DB] MapReduce

    概述 大数据计算的核心思想:移动计算比移动数据更划算 MapReduce既是一个编程模型,又是一个计算框架 包含Map和Reduce两个过程 终极目标:用SQL语句分析大数据(Hive.SparkSQ ...

  2. 攻防世界(十二)upload1

    攻防世界系列 :upload1 1.打开题目,文件上传. 2.立即上传shell 1.php <?php @eval($_POST[root]); ?> 提示只能上传图片 3.burp改报 ...

  3. Mysql_源码包安装详细过程

    一.mysql安装 1.二进制安装 2.源码包安装 3.rpm包安装 1.源码包安装 1)上传或下载源码包 [root@db02 ~]# rz mysql-5.6.46.tar.gz 2)安装依赖 由 ...

  4. 使用Prometheus Operator 监控Kubernetes(15)

    一.Prometheus概述: Prometheus是一个开源系统监测和警报工具箱. Prometheus Operator 是 CoreOS 开发的基于 Prometheus 的 Kubernete ...

  5. Java 事务的隔离级别

    引言 之前关于事务的文章已介绍了事务的概念以及事务的四个属性(ACID),相信你对事务应该有所认识和了解. 本篇文章是关于事务的隔离性,介绍数据库提供的多种隔离级别. 数据库访问的并发性问题 所谓事务 ...

  6. 1.4linux文件和目录常用命令

    文件和目录常用命令 目标 查看目录内容 ls 切换目录 cd 创建和删除操作 touch rm mkdir 拷贝和移动文件 cp mv 查看文件内容 cat more grep 其他 echo 重定向 ...

  7. sizeof 的妙用

    (1)sizeof也可以对一个函数调用求值,其结果是函数返回类型的大小,函数并不会被调用.

  8. 遇到问题 DS1302读取数据有问题

    读出的数据 错误的原因 是因为  DS1302的初始化函数中 移植的时候  没有改要使能的端口号 但是我的板子用另一个(如下的工程单独下载进板子后可以运行)还是可以用的 原因是 而我那个  读数据全为 ...

  9. 常用数据库连接池配置及使用(Day_11)

    世上没有从天而降的英雄,只有挺身而出的凡人. --致敬,那些在疫情中为我们挺身而出的人. 运行环境 JDK8 + IntelliJ IDEA 2018.3  优点: 使用连接池的最主要的优点是性能.创 ...

  10. unity inputfield 过滤emoji输入

    unity版本:unity2017.1.5f1 复现步骤:InputField在安卓手机InputField连续输入两个emoji会报错 报错内容: 2020-01-08 19:56:38.366 2 ...