// Unity學習筆記,自己會記錄一些學習中遇到的問題,可以給自己看也可以給需要的人看,希望能幫助掉在同樣坑里的小伙伴們
// 初學者,沒太多編程基礎,所以難免可能會有寫錯的地方,請見諒
Let's go!
昨天正式開始學習Unity,直接去官網看的教學視頻。
第一個視頻是Roll-a-ball tutorial
http://unity3d.com/cn/learn/tutorials/projects/roll-ball-tutorial
第一步 讓球動起來
到第3課照著弄完,球就是不動。。。
后來發現是視頻里script不適用于最新版本的unity,修改了script之后(加入了speed),球會動了,但總是往下掉。。
原來是sphere collider不知道什么時候被我給勾掉了,勾上之后就不會掉了!
還剩一個問題是 點擊上下左右后,球會延遲很久才動,到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: (大約是變藍色說明加載好了)
... 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
第二步 讓鏡頭跟隨球移動
直接將camera丟到球下面,camera也會跟著球一起動,但是當球滾動時,camera也滾動了,所以改為使用script的控制camera跟隨。
這次的script比較簡單,一次成功~
學到了兩個東西
1.?fixupdate、update和lateupdate
這篇文章介紹的很清楚:http://bbs.9ria.com/thread-417976-1-1.html
簡單說
fixupdate “在固定的時間間隔執行,不受游戲幀率的影響”; “FixedUpdate是真實時間,所以處理物理邏輯的時候要把代碼放在FixedUpdate而不是Update.”
LateUpdate是在所有Update函數調用后被調用
是在所有script里的update之后:update update update …… lateupdate
在控制鏡頭跟隨時,要讓球動完,鏡頭再動,所以使用lateupdate(感覺在這個例子中看不大出來差別)。
2. public與private
不算完全懂吧,但是知道了一點
public定義的變量 會在inspector中可編輯
private定義的變量 只能在script中設定
第三步 制作游戲場景
這一段就很順利了,加cube做墻,加cube做pickup,通過寫script(transform.rotate)讓pickup自旋起來。
記幾個關鍵點吧:
1. rotate時,為了不受設備幀率的影響,使用Time.deltatime來抵消幀率差異
transform.rotate (new Vector3(x,y,z) * Time.deltatime )
2. 游戲中反復使用的物品可使用perfab制作模板
3. 通過Local和Global切換坐標系
2016/07/06
續:
通過腳本實現pickup可被球給pick up:
進入球的腳本
onTriggerEnter 探測球和其他物體的碰撞
給pickup加上tag,通過compareTag檢測碰撞對象是否為pickup
如果是,使用setActive(false)讓該pickup消失
把pickup設為trigger(否則onTriggerEnter不會生效)
pickup的性能優化:
- 通過給pickup加上rigidbody讓unity知道它是dynamic的,不是static的,這樣就不會每次pickup一轉動就從新計算所有的static物體
- kinematic的使用:把pickup的rigidbody設為kinematic,kinematic不受物理力的作用(包括重力),但可以通過transform進行各種變化
今天是7月7日,看不到盡頭的黑色天空,眼里的很多汗吃回到了嘴里。感謝unity讓我能到另一個世界。
第四步 游戲分數計算與獲勝提示
這一段也很順利
在球的script中,新建變量count記錄pick up到的pickup的數量
場景中新建文本UI(countText)顯示count
設定countText的顯示規則
場景中將countText拖到球的count text空欄中,完成指向
類似方法,創建winText吃掉所有pickup后顯示
學到幾點:
使用ui,要在抬頭加 using Unity.Engine.UI
.text設定文本內容,.ToString數字轉化為文本
避免重復可自制函數
@.@ Roll the ball 就做好啦! @*-*@
2016/07/08