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

相關文章
相關標籤/搜索