以簡單的方式講述游戲開發思路,暫時沒有實踐,如有錯誤,歡迎各位大佬指錯
關卡數據保存方式
數據保存我選用json,可讀性強,解析快
消消樂物體處理方式
消消樂物體我將以預制體的方式使用(把物品拖到Asset文件夾即為預制體)
游戲每一關初始化
初始化要做的事情:
-
把關卡或計時等信息與UI對象相關聯
-
通過Json數據以及Asset存的預制體實例化初始消消樂地圖
玩家游戲中點擊屏幕響應
-
判斷點擊是否為一個可被消除物品
method: 可通過Physics2D.OverlapPointAll
判斷點擊是否包含碰撞體數組,因為返回的是碰撞體數組,所以物品身上必須加上一個碰撞體(額,為此如果數量多了可能影響游戲性能)如果還不明白的話可以看我的這篇文章2d點擊獲取物體 -
如果點擊物品可被消除,則遞歸檢查該物品周圍是否有相同物品,
-
如果有相同的物品即可消除,否則返回null
點擊屏幕后
-
如果有物體被刪除則利用遞歸判斷哪里下面的物體被刪除,
-
然后根據情況往下移動格子,注意每次移動都要遞歸來判斷,哪里可以繼續移動格子
-
移動完成后返回一個bool值true,接着繼續在消消樂地圖上方生成物體,然后移動到指定空格子中,這里要用遍歷,對地圖內所有物體進行檢查,空的就是要生成並移動到的位置
在這里給大家推薦一個插件,叫DOTween,他可以對物體進行移動,旋轉,縮放,漸變等,非常方便,在使用的時候只需要引入
DG.Tweening
命名空間即可使用
另外還有一個DOTween Pro我就不給大家介紹了,它就是在DOTween 的基礎上增加了在編輯器中編輯動畫組件,而不是在代碼中修改,這也是為了技美着想吧!當然如果你不想看DOTween文檔,想快速了解,也可以看我的這篇文章關於DOTween的使用
游戲一些細節效果
-
當物體可以被摧毀那么把可摧毀物體聚集到屏幕中間旋轉,隨之往四面八方移動漸隱
-
玩家每次點擊屏幕不管點到哪里都會在點擊位置生成粒子特效
-
每次點擊都會播放音效
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");
-
在一個游戲管理類中設定一個整數Score,以及每一關Score線,當超過分數線比如及格,優秀,滿分,就會播放不同的音效,或接着生成煙花粒子,並且同時在屏幕中心生成一個五角星,然后快速移動到屏幕上方設定的每一關星星數量那里,如果按及格優秀,滿分來分 分數線那么星星滿星為三顆
-
因為游戲內基本都是用的熱更新,不過我今天再介紹一個游戲內部更新的方式,需要你對Android交互有一定的了解