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
*/
#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交互有一定的了解


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM