Unity 消消乐开发思路

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

关卡数据保存方式

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

消消乐物体处理方式

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

游戏每一关初始化

初始化要作的事情:编辑器

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

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

玩家游戏中点击屏幕响应

  1. 判断点击是否为一个可被消除物品
    method: 可经过Physics2D.OverlapPointAll判断点击是否包含碰撞体数组,由于返回的是碰撞体数组,因此物品身上必须加上一个碰撞体(额,为此若是数量多了可能影响游戏性能)若是还不明白的话能够看个人这篇文章2d点击获取物体this

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

  3. 若是有相同的物品便可消除,不然返回nullcode

点击屏幕后

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

  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交互有必定的了解

相关文章
相关标签/搜索