總所周知温峭,八分音符醬是利用設(shè)備錄入的聲音大小來判斷行走和跳躍攻泼,所以我們利用五個部分來做一個簡易版的“八分船來醬”
一揖赴、獲取電腦/手機(jī)的麥克風(fēng)
1雪位、創(chuàng)建一個空物體竭钝,并自主命名(我命名為MIC),用來承擔(dān)麥克的檢測雹洗,并在MIC中添加C#腳本(同樣自主命名)
2香罐、在MIC腳本中定義一個叫“volume”的變量來檢測音量的大小
public float volume
3、獲取到設(shè)備的名字
string device
4队伟、利用AudioClip以儲存聲音信息
AudioClip mic
5穴吹、在start方法中獲取設(shè)備幽勒,且調(diào)用方法錄制音頻
device = Microphone.devices[1]
mic = Microphone.Start(device, true, 999, 44100)
*若有多個收聲設(shè)備嗜侮,Microphone.devices[]中括號中若是0則是默認(rèn)麥克,1或其他數(shù)則為其他外設(shè)麥克
**mic = Microphone.Start(device, true, 999, 44100)則是直接利用官網(wǎng)API的代碼中間的999則是音頻錄制時間,可以自行調(diào)節(jié),44100則是音頻采樣率
6锈颗、定義一個float方法顷霹,以來返回音量信息
float GetVolume()
{
????float MVolume = 0;
????float[] volumeData = new float[128];
????int offset = Microphone.GetPosition(device) - 128 + 1;//從哪里開始采樣(因為值不能是0,所以后面要單獨+1)
????if (offset < 0)
????{
????????return 0;
????}
????micRecord.GetData(volumeData,offset);
????for (int i = 0; i < 128; i++)//一個簡單的for循環(huán)
????{
????????float tempM = volumeData[i] * volumeData[i] * volumeData[i];//根據(jù)麥克風(fēng)的實際情況* volumeData[i]這個值(若代碼和我一樣击吱,但是麥克風(fēng)收音時還是很容易到達(dá)0.9幾那就在后面再重復(fù)* volumeData[i])
????????if (M_Volume < tempM)
????????{
????????????M_Volume = tempM;
????????}
????}
????return M_Volume;
}
7淋淀、在Update中設(shè)定
volume = GetVolume
如此,電腦的unity就可以接受麥克的聲音了
二覆醇、設(shè)計游戲組件
(我這里沒有2D素材所以下列操作都基于3D朵纷,當(dāng)然,我也會將2D操作方法永脓,內(nèi)容都是大同小異袍辞,如果你有2D素材也可以試一下)
1、插入一個球體作為主角常摧,并更改tag為Player搅吁,添加剛體(Rigidbody)組件讓小球有重力,再添加move代碼
2落午、插入一個長方體作為地板谎懦,可以Ctrl+D多做幾個
三、Player的移動
1溃斋、定義float變量命名為volume界拦,且之前MIC中的
MIC代碼:public float volume;改為——》public?static float volume;(仔細(xì)看上面那張圖,有寫)
move代碼:public float volume;
3梗劫、獲取剛體寞奸,定義跳躍高度和移動速度
????Rigidbody rig;
? ? public float jump;
? ? public float speed;
4、在start代碼中將剛體實例化
rig = GetComponent<Rigidbody>();
5在跳、定義跳(Jump)和移動(Move)的方法
void Jump()
? ? {
? ? ? ? rig.AddForce(Vector2.up * jump * volume);
? ? }
? ? void Move()
? ? {
? ? ? ? rig.AddForce(Vector2.right * 10);
? ? }
6枪萄、在Update中調(diào)用并設(shè)計(聲音在0.1~0.2之間只能移動猫妙,而超過0.2則可跳躍)
volume = mic.volume;
? ? ? ? if (volume > 0.1)
? ? ? ? {
? ? ? ? ? ? Move();
? ? ? ? ? ? if (rig.velocity.x > speed)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? rig.velocity = new Vector2(speed, rig.velocity.y);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? if (volume > 0.2)
? ? ? ? {
? ? ? ? ? ? if (Time.time - tempTime > 2.5f)//CD時間大于2.5秒時
? ? ? ? ? ? {
? ? ? ? ? ? ? ? Jump();//可以跳躍
? ? ? ? ? ? ? ? tempTime = Time.time;//CD清零
? ? ? ? ? ? }
? ? ? ? }
四瓷翻、死亡線
死亡線比較簡單,就一個碰撞體和一個腳本來檢測碰撞
1割坠、插入一個空物體齐帚,添加一個3D碰撞箱(如果有2D素材的話2D碰撞體也可以)
*2D碰撞箱要勾選Is Trigger選項
2、添加一個腳本命名為DEAD
3D
private void OnCollisionEnter(Collision collision)
? ? {
? ? ? ? Dead.SetActive(true);
? ? }
我這里是做了一個死亡的場景彼哼,我會在第五步講解
2D
private void OnTriggerEnter2D(Collider2D collision)
? ?{
? ? ? if (collision.gameObject.tag == "Player")
? ? ? ?{
? ? ? ? ? ? Dead.SetActive(true);
? ? ? ? }
? ? }
*如果不想做UI可以直接將
?Dead.SetActive(true);換成——》SceneManager.LoadScene(0);
就可以直接重啟游戲
五对妄、簡單的UI和攝像機(jī)的跟蹤
1、攝像頭跟蹤
我們可以利用Unity自帶的cinemachine組件
Window——>Package Manager——>All packages——>Cinemachine下的Import
然后頂部功能條上就會出現(xiàn)cinemachine組件
我們選擇create 2D camera
如此在項目欄中會出現(xiàn)CM vcam1的一個攝像頭敢朱,咱們可以微做調(diào)整
Follow中指定項目為Player
我的圖片如下(僅供參考)
2剪菱、簡單的UI
插入UI中的Panel摩瞎,調(diào)成自己喜歡的亞子,并插入文字和按鈕
將組件的勾去掉孝常,讓組件處于false狀態(tài)
將OVER UI拖拽到死亡線的Dead代碼中的Dead賦值即可旗们,這樣,當(dāng)小球(船來)碰到死亡線的碰撞箱時就會彈出OVER這個UI