以簡單的方式講述遊戲開發思路,暫時沒有實踐,如有錯誤,歡迎各位大佬指錯
關卡資料儲存方式
資料儲存我選用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互動有一定的瞭解