日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

siki学院_Unity初级案例_愤怒的小鸟_学习笔记1/3

發(fā)布時(shí)間:2024/3/24 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 siki学院_Unity初级案例_愤怒的小鸟_学习笔记1/3 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

說(shuō)明:本次學(xué)習(xí)開(kāi)始于2018年9月23日,至9月26日已看完全部教學(xué)視頻,并已基本完成該案例的制作,歷時(shí)四天。本文檔為我在學(xué)習(xí)過(guò)程中,通過(guò)記事本記錄的學(xué)習(xí)過(guò)程,對(duì)于該游戲案例的制作過(guò)程并不十分詳盡,不作為教程使用,僅用于自己學(xué)習(xí)參考,記錄于此,聊表心意。

2018年9月23日

siki學(xué)院官網(wǎng)在線(xiàn)視頻 憤怒的小鳥(niǎo) Unity2017.3.0f3開(kāi)發(fā) 講師lvy

一 新建工程 2d 在d盤(pán)的users目錄下

★★2d3d場(chǎng)景的切換,更改相機(jī)的【projection】屬性(有透視和正交兩個(gè)),在編輯器主菜單>項(xiàng)目設(shè)置>編輯器>中的模式改為2/3d ?即可。

★★新建場(chǎng)景,新建三個(gè)場(chǎng)景,分別為L(zhǎng)oading,level,game。

★★導(dǎo)入資源,圖片和音頻等

★★圖集的處理,更改圖片模式【sprite mode】(改為multiple),編輯,將單張圖集裁切,有編號(hào),應(yīng)用。

★★圖片層級(jí)關(guān)系處理,在游戲物體上,點(diǎn)擊【sorting layer】>添加player層,將主角設(shè)置為player層,通過(guò)【order in layer】的數(shù)值來(lái)調(diào)節(jié)顯示層級(jí)關(guān)系。

★★給小鳥(niǎo)添加【spring joint 2d】的彈簧關(guān)節(jié)組件(其用于連接兩個(gè)剛體組件像彈簧一樣運(yùn)動(dòng)),系統(tǒng)自動(dòng)添加【rigidbody 2d】的2d剛體組件。
給右邊彈弓添加2d剛體,設(shè)置類(lèi)型為靜態(tài)(不會(huì)受重力影響,不會(huì)掉落)

再看spring joint 2d組件,其中【connected rigid body】為連接的另一個(gè)2d剛體物體,
另有是否自動(dòng)/設(shè)置連接的錨點(diǎn),
另有是否自動(dòng)/設(shè)置連接的距離,
另下方有【frequency】頻率屬性(其值為彈性系數(shù),值越大約不易被拉長(zhǎng)),
另有【Damping ratio】屬性為阻尼系數(shù)(范圍0-1值越大阻力越大)。

★★給小鳥(niǎo)加2d碰撞體(圓形的即可)然后添加腳本,實(shí)現(xiàn)鼠標(biāo)拖拽跟隨運(yùn)動(dòng)。

函數(shù):private void OnMouseDown(){} ?鼠標(biāo)按下
? ? ? private void OnMouseUp(){} ? ?鼠標(biāo)抬起觸發(fā)函數(shù)執(zhí)行。

在update中位置跟隨鼠標(biāo)的實(shí)現(xiàn)

transform.position = Camera.main.ScreenToWorldPoint(Input.mousePosition);

將鼠標(biāo)在屏幕上的點(diǎn)擊位置(坐標(biāo)原點(diǎn)為屏幕左下角)裝換為相應(yīng)的世界坐標(biāo)位置(原點(diǎn)為屏幕中心),但此轉(zhuǎn)換后的位置會(huì)被加上一個(gè)主相機(jī)的z軸坐標(biāo)值,在這里是-10,故還需要減去。

transform.position += new Vector3(0,0,-Camera.main.transform.position.z);

★★最大距離限制(判斷與值計(jì)算)

在right上建立一個(gè)空子物體,移動(dòng)到彈簧關(guān)節(jié)點(diǎn),在代碼中此點(diǎn)為距離基準(zhǔn)點(diǎn),當(dāng)鼠標(biāo)拖動(dòng)的位置超出限定值maxDis時(shí),小鳥(niǎo)位置將保持方向,距離為最大距離。實(shí)現(xiàn)如下

if (Vector3.Distance(transform.position,rightPos.position) > maxDis) {
? ? Vector3 pos = transform.position - rightPos.position;
? ? pos = pos.normalized * maxDis;
? ? transform.position = pos + rightPos.position;
}

說(shuō)明,在鼠標(biāo)按下移動(dòng)的條件下,判斷鼠標(biāo)當(dāng)前位置是否超過(guò)最大限制,如果超過(guò),則先獲得該方向(物體當(dāng)前位置減去基準(zhǔn)點(diǎn)),方向單位化再乘以最大距離得到該方向向量,物體限制后的位置為基準(zhǔn)位置加上方向向量。完成。

★★小鳥(niǎo)飛出(抬起鼠標(biāo)時(shí)的剛體和彈簧組件的設(shè)置)

思路是在代碼中獲得其剛體組件和2d彈簧組件,

在鼠標(biāo)按下時(shí),將剛體組件屬性設(shè)置為【Kinematic】(小鳥(niǎo)默認(rèn)狀態(tài)為【dynamic】動(dòng)力學(xué)的,會(huì)受力的影響,改為Kinematic后,受到transform影響,不受力影響)代碼(rg.isKinematic = true;),

在鼠標(biāo)抬起時(shí),先關(guān)閉Kinematic屬性,代碼(rg.isKinematic = false;),此時(shí)小鳥(niǎo)將受到力的影響,

在0.1秒后,將2d彈簧組件關(guān)閉,此過(guò)程為,在這0.1秒中受到彈簧的力影響,并已經(jīng)有了運(yùn)動(dòng)趨勢(shì),0.1秒結(jié)束后,小鳥(niǎo)只受2d剛體的作用,在先前的運(yùn)動(dòng)趨勢(shì)下,飛出。代碼如下:

Invoke("Fly",0.1f);
? ? private void Fly() {
? ? ? ? sp.enabled = false;
? ? }

關(guān)于Invoke()函數(shù)的調(diào)用,兩個(gè)參數(shù),第一個(gè)為調(diào)用的函數(shù)(string),第二個(gè)為延遲的時(shí)間(float)。


★★背景場(chǎng)景搭建(圖集的操作)

同樣的圖集剪切操作,剪切不好的可以自己調(diào)整,Ctrl+D可以復(fù)制,小鳥(niǎo)的剛體組件中,有【angular drag】屬性,表示角阻力,增大其值,使小鳥(niǎo)不會(huì)旋轉(zhuǎn)太快,運(yùn)動(dòng)時(shí)會(huì)逐漸停止,起到類(lèi)似于空氣阻力的效果。

★★小豬的基礎(chǔ)設(shè)置(碰撞/死亡/受傷的框架)

添加剛體組件(設(shè)置角阻力為2),添加球形碰撞盒。添加代碼。
首先介紹兩個(gè)碰撞函數(shù):

? ? private void OnCollisionEnter2D(Collision2D collision) {
//碰撞檢測(cè)
? ? }
碰撞條件,兩個(gè)物體都是剛體和碰撞體,碰撞后會(huì)發(fā)生反彈
? ? private void OnTriggerEnter2D(Collision2D collision) {
//觸發(fā)檢測(cè)
? ? }
觸發(fā)條件,兩個(gè)物體都是碰撞體,其中一個(gè)是剛體,其中一個(gè)物體勾選觸發(fā)器。碰撞后不反彈(如有誤以后勘正)。

小豬受傷/死亡原理,給小豬一個(gè)最小速度(觸發(fā)受傷的相對(duì)速度)和最大速度(觸發(fā)死亡的相對(duì)速度),在碰撞函數(shù)中,使用if語(yǔ)句判斷執(zhí)行,分別執(zhí)行死亡的操作和受傷的操作。代碼如下:

? ? private void OnCollisionEnter2D(Collision2D collision) {
? ? ? ? if (collision.relativeVelocity.magnitude > maxSpeed) {
? ? ? ? ? ? Destroy(gameObject);
? ? ? ? } else if (collision.relativeVelocity.magnitude > minSpeed) {
? ? ? ? ? ? render.sprite = hurt;
? ? ? ? }
? ? }

其中,render組件需要先聲明,并在awake函數(shù)中得到,受傷的圖集由public屬性從外部賦值得到。

★★給彈弓畫(huà)線(xiàn)

彈弓左右枝上分別建立一個(gè)畫(huà)線(xiàn)點(diǎn),并在左右枝上分別添加【Line Renderer】組件,該組件,給材質(zhì)添加材質(zhì)球,在顏色屬性處改變顏色,在【whdth】屬性處改變寬度。

畫(huà)線(xiàn)的操作在小鳥(niǎo)的代碼中,聲明兩個(gè)公共位置變量(在編輯器賦左右枝的畫(huà)線(xiàn)點(diǎn)),聲明兩個(gè)公共畫(huà)線(xiàn)組件(同樣在編輯器將左右兩枝賦給他),寫(xiě)畫(huà)線(xiàn)函數(shù)。放在isClick判斷句內(nèi)。

? ? void Line() {
? ? ? ? rightLine.SetPosition(0,rightPos1.position);
? ? ? ? rightLine.SetPosition(1,transform.position);
? ? ? ? leftLine.SetPosition(0,leftPos1.position);
? ? ? ? leftLine.SetPosition(1,transform.position);
? ? }

其中,setposition為畫(huà)線(xiàn)的兩個(gè)點(diǎn),用法如上,一目了然。

★★小豬死亡特效

先制作爆炸特效的預(yù)制體,選中幾個(gè)圖集,拖到場(chǎng)景目錄上,自動(dòng)彈出動(dòng)畫(huà)制作的窗口,會(huì)自動(dòng)生成一個(gè)物體,上面掛載動(dòng)畫(huà)狀態(tài)機(jī),動(dòng)畫(huà)狀態(tài)機(jī)綁定一個(gè)動(dòng)畫(huà),該動(dòng)畫(huà)是圖集動(dòng)畫(huà),選中該物體,按Ctrl+6,打開(kāi)動(dòng)畫(huà)編輯器,可以對(duì)圖集動(dòng)畫(huà)進(jìn)行編輯修改(如更換添加刪除圖片等),在這里對(duì)特效添加一個(gè)控制代碼,寫(xiě)上一個(gè)銷(xiāo)毀函數(shù),在動(dòng)畫(huà)編輯窗中在最后一幀添加事件,為其銷(xiāo)毀函數(shù),這樣,在動(dòng)畫(huà)播放完之后,就會(huì)自己銷(xiāo)毀掉,動(dòng)畫(huà)物體制作好后,制作成預(yù)制體。

實(shí)現(xiàn)爆炸特效,在pig的代碼中先聲明公共屬性gameobject(在外面賦值預(yù)制體public GameObject boom;),寫(xiě)一個(gè)處理死亡的函數(shù),生成爆炸的預(yù)制體,在死亡處調(diào)用。

? ? void PigDead() {
? ? ? ? Instantiate(boom,transform.position,Quaternion.identity);
? ? }

函數(shù)參數(shù)說(shuō)明,生成的游戲?qū)ο?#xff08;通過(guò)預(yù)制體賦值),生成時(shí)的位置,生成時(shí)的旋轉(zhuǎn)方向。不再贅述。

分?jǐn)?shù)特效,分?jǐn)?shù)圖集制作成預(yù)制體(這個(gè)預(yù)制體就是一個(gè)圖片),在pig的死亡處添加生成該預(yù)制體的語(yǔ)句即可。

? ? ? ? GameObject Score = Instantiate(pigScore,transform.position + new Vector3(0,0.4f,0),Quaternion.identity);
? ? ? ? Destroy(Score,1f);

其中,為了讓生成位置在豬的上方,銷(xiāo)毀也是在1秒之后銷(xiāo)毀。

總結(jié)

以上是生活随笔為你收集整理的siki学院_Unity初级案例_愤怒的小鸟_学习笔记1/3的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。