一. 材質
生活當中會有很多不同的材質,譬如說平時走的水泥地,或是室內的木地板,我們踩在上面的感覺和效果都是不一樣的,在游戲裡同樣能模擬出不同材質物體。
首先,建立兩個平面,把其中一個旋轉變成傾斜的並且貼著另一個平面,這就能夠模擬出一個坡,只不過在斜坡上的物體會滑下來嗎?
接著建立一個立方體並分別把立方體和斜坡添加一個顏色,然後把平面的旋轉複製到立方體上,使得立方體緊貼斜坡,最後給立方體加上“rigidbody”元件。
過程看不出來,但是立方體確實沿著斜面往下滾到底了,只不過為什麼是滾呢?因為摩擦力無法被控制,甚至於傾斜角度不夠的時候立方體甚至不會動。
接下來要做的就是控制摩擦力,但是無法直接修改具體參數,只能從材質下手,如果這個材質的摩擦力很小不就可以讓立方體滑下來了嗎?在“專案”建立一個物理材質並且添加到斜坡上。
然後把靜摩擦力和動摩擦力都設為0.2,這個時候執行就可以看到立方體往下滑而不是往下滾。
甚至可以給它加上彈力,讓它滑下來之後再彈兩下增加遊戲的真實性
二. 射線檢測
我們在玩RPG的遊戲時常常會遇到考滑鼠點擊地面來控制角色移動,最典型的的就是LOL和博德之門3,不過這些是怎麼做到的呢?首先要知道一件事,玩遊戲能看到的範圍就是攝影機的範圍,所以想要控制畫面中的物體就必須從攝影機下手。事實上,點擊遊戲畫面後的攝影機會射出一條射線,射出的射線碰到的物體就會反饋給遊戲,這樣就能獲取我們點的位置。
知道了原理就可以開始實作了,建立空腳本“RayTest”掛到球體上,接下來我要實現的就是在平面上發射一條射線,然後球體就跑去射線的位置。發射射線有兩種方法,第一種就是常規方式,給一個點和方向做出一條射線;第二種方法是通過攝影機來獲取一個向量
看得出來我要用第二種,不過有一點小瑕疵需要修改,我必須讓unity時刻監聽滑鼠,也就是要放到下面的Update()去,並且不能時刻發出射線,只有在滑鼠點擊的時候可以發出射線。
發射之後還要判斷是否碰到了物體,想要碰到物體,這個物體必須有碰撞器,所以接下來要聲明一個碰撞信息類,然後寫一個碰撞檢測,如果碰撞有發生的話hit就有內容了,最後先回傳碰到的坐標
執行後隨便點了幾下,確實報了坐標,代表功能基本沒問題了。
最後,加上這一行就可以做到用滑鼠控制物件移動了,只不過是瞬間移動,沒有移動的動畫,這個都是後期需要完善的。