阅读 141

Unity 消消乐开发思路

Unity 消消乐开发思路

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

关卡数据保存方式#

数据保存我选用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*/#endregionpublic 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交互有一定的了解

来源https://www.cnblogs.com/godshadow/p/14970440.html

文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐