創作內容

6 GP

【教學】Unity 街機物理車 - 第一部份

作者:樂小呈│2019-10-15 19:49:31│巴幣:12│人氣:504
有不少問題
這幾篇都沒用了,還是別看吧

前言~
這只是用一系列物理計算來[模擬]出車子的行為
但本質上還是跟車子有些差距,
所以還是可能出現一些不太符合車子常理的現象

雖然說這並不是真正的車子,但這也是它的U點
意思就是它沒必要是車子
你可以放個飛艇模型就把它當飛艇,或是放個板子當懸浮板
所以實用性還是很廣的,可以放心~

這目前還有許多問題沒有修復
如果真的需要比較完整的功能還是建議去Assetstore買成品吧

成果的樣子↓

建議稍微了解Unity的物理再來看,因為有些基礎的東西我不一定會解釋
本篇教學會依照這部影片的概念解說,我自己做主要也是照著這部的解說做的
在開始做前建議先看過一次
想自己挑戰的也可以自己試試
因為圖文教學沒辦法像影片一樣一行一行解說
所以建議在觀看教學時盡量來回比對程式碼以及解說
進入正題!
//

Unity 街機物理車 - 第一部份
生成懸吊點、計算懸吊距離


首先你只需要建立一個方塊,並把他拉成你想要的形狀
然後在方塊上建立一個新的腳本
接下來的一切都會在這個腳本上進行
腳本名隨意(我是取 ArcadeVehicle)
(圖A - 1)


打開腳本~
首先是變數的部分
懸吊點是動態生成的,所以需要一些基本數據
Vector3 - 懸吊點的位置
float - 懸吊長度
LayerMask - 地面的Layer
Suspensions[] - 用來儲存懸吊的資料
(B - 1)
//


然後是顯示出懸吊的預覽
OnDrawGizmos()
首先判斷編輯器的狀態是否不在遊玩狀態中,因為這是預覽
因為計算公式的關西,所以懸吊點必須要對稱,這就是我用動態生成的原因
迴圈的概念不多解釋,就是對稱
DrawSphere也不解釋,就畫點
DrarLine的部分,因為車子可能會旋轉,所以得要用(-transform.up)來代替(Vector3.down)
你也可以試試看用(Vector3.down)會發生什麼事
(B - 2)


回到編輯器
你的車子應該要出現懸吊點(紅點)、懸吊長度(紅線)
沒出現可能是你沒開Gizmos
旁邊的參數可以依自己的喜好(遊戲需求)調整
(A - 2)
//


現在有了預覽,接下來來就是生成懸吊點
迴圈跟計算位置就沒啥好說的,跟剛剛的預覽一樣
因為懸吊點只需要是一個EmptyGameObject
所以這裡是用(GameObject suspension = new GameObject();)來生成懸吊點
然後設計一些基本的Trnsform,不多解釋
最後記得要把懸吊點存入 (Suspensions[]suspensions)用來之後的計算
(B - 3)
然後記得要在Start()中調用
(B - 4)

回到編輯器檢查懸吊點有沒有正常生成~
//

現在可以開始計算懸吊需要的數據了
這個函式需要回傳一個(RaycastHit[])用來給之後的計算
迴圈不解釋,就把每個懸吊點跑一次
然後用Physics.Raycast來偵測懸吊的數據,這部分我也不多說
懸吊的距離就用剛剛Raycast出的數據
最後再把資料加入要回傳的陣列,迴圈結束後回傳
(B- 5)


然後記得在FixedUpdate()中調用,原因不解釋,就物理計算
建立一個RaycastHit[]儲存剛剛回傳的資料
(B- 6)

現在他已經有進行懸吊的偵測了
你可以把RaycastHit的數據Print出來,檢查看看有沒有成功
記得要設置groundLayer
//


它現在已經有在做懸吊的偵測了
但看不到還是有點怪怪的,所以現在要讓它顯示出來
變數
加入兩個用來Debug的變數
記得要using  UnityEngine.UI;
(B - 7)


然後在場景中建立Canvas及4個Test
並把它們放入變數中(bounceText)
(A - 3)


建立一個函式用來顯示懸吊
Text的位置不解釋,就是轉成UI座標
LinePoint就是計算懸吊的接觸點(取錯名了,應該是LineEnd)
LineColor也不解釋
然後畫線、把LinePoint傳入全域變數,等等會用、讓text顯示出懸吊距離
(B- 8)


回到OnDrawGizmos()
讓懸吊的碰撞點顯示一顆球
(B - 9)


最後再到SuspensionBounce()
建立一個變數,就是懸吊的距離,但是四捨五入到小數2
並調用剛剛的顯示懸吊函式
(B - 10)


最後!
回到編輯器檢查成果
Text可能會有點偏移,只要更改錨點就好了
記得要設置groundLayer

好了~
這樣第一部份就完成了,接下來是計算懸吊的施力
輕鬆的部分完成了,接下來是痛苦的部分,我是指我自己

換了一種寫法,這種寫法看大家起來應該不會像之前Fog of War那樣吃力~


第二部分


引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4561166
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:Unity|遊戲開發

留言共 3 篇留言

約瑟森林的一枚白伊
這是啥程式語言

10-16 15:23

樂小呈
C# ~10-16 15:47
69
不好意思,想問一下GroundLayer 是設置甚麼?

01-12 09:26

樂小呈
就是設置那些是地面01-12 09:31
樂小呈
你怎麼會找到這篇文,這是一年半前的黑歷史诶[e28]01-12 09:31
69
喔好的謝謝~ 因為最近在做類似的東西 搜尋第一個就是這篇文章了XD

01-12 11:24

樂小呈
好吧,僅...僅供參考ㄡ,這篇做出來的效果真的不好[e3]01-12 11:29
我要留言提醒:您尚未登入,請先登入再留言

6喜歡★angus945 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:Unity 街機物理車(... 後一篇:【教學】Unity 街機...

追蹤私訊切換新版閱覽

作品資料夾

Niwaiwaiwai大家
小屋更新了插畫喔,這次是可愛的妹妹看更多我要大聲說昨天16:54


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】