// Unity學(xué)習(xí)筆記绎签,自己會(huì)記錄一些學(xué)習(xí)中遇到的問題震捣,可以給自己看也可以給需要的人看荔棉,希望能幫助掉在同樣坑里的小伙伴們
// 初學(xué)者,沒太多編程基礎(chǔ)蒿赢,所以難免可能會(huì)有寫錯(cuò)的地方润樱,請(qǐng)見諒
Let's go!
昨天正式開始學(xué)習(xí)Unity羡棵,直接去官網(wǎng)看的教學(xué)視頻壹若。
第一個(gè)視頻是Roll-a-ball tutorial
http://unity3d.com/cn/learn/tutorials/projects/roll-ball-tutorial
第一步 讓球動(dòng)起來(lái)
到第3課照著弄完,球就是不動(dòng)皂冰。店展。。
后來(lái)發(fā)現(xiàn)是視頻里script不適用于最新版本的unity秃流,修改了script之后(加入了speed)赂蕴,球會(huì)動(dòng)了,但總是往下掉舶胀。概说。
原來(lái)是sphere collider不知道什么時(shí)候被我給勾掉了碧注,勾上之后就不會(huì)掉了!
還剩一個(gè)問題是 點(diǎn)擊上下左右后糖赔,球會(huì)延遲很久才動(dòng)萍丐,到unity的forum上找到了解決辦法:
To do this, use the play buttons at the top of the editor:
First put the editor in pause mode:
Then enter playmode: (大約是變藍(lán)色說(shuō)明加載好了)
... and this way, you'll be in paused play-mode. Let the editor fully load and start the scene, then uncheck pause and play the game:
The ball should move immediately.
搞定!
?2016/07/05
第二步 讓鏡頭跟隨球移動(dòng)
直接將camera丟到球下面放典,camera也會(huì)跟著球一起動(dòng)逝变,但是當(dāng)球滾動(dòng)時(shí),camera也滾動(dòng)了奋构,所以改為使用script的控制camera跟隨壳影。
這次的script比較簡(jiǎn)單,一次成功~
學(xué)到了兩個(gè)東西
1.?fixupdate声怔、update和lateupdate
這篇文章介紹的很清楚:http://bbs.9ria.com/thread-417976-1-1.html
簡(jiǎn)單說(shuō)
fixupdate “在固定的時(shí)間間隔執(zhí)行态贤,不受游戲幀率的影響”舱呻; “FixedUpdate是真實(shí)時(shí)間醋火,所以處理物理邏輯的時(shí)候要把代碼放在FixedUpdate而不是Update.”
LateUpdate是在所有Update函數(shù)調(diào)用后被調(diào)用
是在所有script里的update之后:update update update …… lateupdate
在控制鏡頭跟隨時(shí),要讓球動(dòng)完箱吕,鏡頭再動(dòng)芥驳,所以使用lateupdate(感覺在這個(gè)例子中看不大出來(lái)差別)。
2. public與private
不算完全懂吧茬高,但是知道了一點(diǎn)
public定義的變量 會(huì)在inspector中可編輯
private定義的變量 只能在script中設(shè)定
第三步 制作游戲場(chǎng)景
這一段就很順利了兆旬,加cube做墻,加cube做pickup怎栽,通過(guò)寫script(transform.rotate)讓pickup自旋起來(lái)丽猬。
記幾個(gè)關(guān)鍵點(diǎn)吧:
1. rotate時(shí),為了不受設(shè)備幀率的影響熏瞄,使用Time.deltatime來(lái)抵消幀率差異
transform.rotate (new Vector3(x,y,z) * Time.deltatime )
2. 游戲中反復(fù)使用的物品可使用perfab制作模板
3. 通過(guò)Local和Global切換坐標(biāo)系
2016/07/06
續(xù):
通過(guò)腳本實(shí)現(xiàn)pickup可被球給pick up:
進(jìn)入球的腳本
onTriggerEnter 探測(cè)球和其他物體的碰撞
給pickup加上tag脚祟,通過(guò)compareTag檢測(cè)碰撞對(duì)象是否為pickup
如果是,使用setActive(false)讓該pickup消失
把pickup設(shè)為trigger(否則onTriggerEnter不會(huì)生效)
pickup的性能優(yōu)化:
- 通過(guò)給pickup加上rigidbody讓unity知道它是dynamic的强饮,不是static的由桌,這樣就不會(huì)每次pickup一轉(zhuǎn)動(dòng)就從新計(jì)算所有的static物體
- kinematic的使用:把pickup的rigidbody設(shè)為kinematic,kinematic不受物理力的作用(包括重力)邮丰,但可以通過(guò)transform進(jìn)行各種變化
今天是7月7日行您,看不到盡頭的黑色天空,眼里的很多汗吃回到了嘴里剪廉。感謝unity讓我能到另一個(gè)世界娃循。
第四步 游戲分?jǐn)?shù)計(jì)算與獲勝提示
這一段也很順利
在球的script中,新建變量count記錄pick up到的pickup的數(shù)量
場(chǎng)景中新建文本UI(countText)顯示count
設(shè)定countText的顯示規(guī)則
場(chǎng)景中將countText拖到球的count text空欄中斗蒋,完成指向
類似方法捌斧,創(chuàng)建winText吃掉所有pickup后顯示
學(xué)到幾點(diǎn):
使用ui捧书,要在抬頭加 using Unity.Engine.UI
.text設(shè)定文本內(nèi)容,.ToString數(shù)字轉(zhuǎn)化為文本
避免重復(fù)可自制函數(shù)
@.@ Roll the ball 就做好啦骤星! @*-*@
2016/07/08