U3d 射線Ray

現(xiàn)在想要實(shí)現(xiàn)這樣一個(gè)需求:當(dāng)鼠標(biāo)放到物體上的時(shí)候,讓物體的大小發(fā)生改變,并且不停的旋轉(zhuǎn),當(dāng)鼠標(biāo)點(diǎn)擊進(jìn)行拖動的時(shí)候,讓物體隨著鼠標(biāo)進(jìn)行拖動。

1.首先呢,大小和旋轉(zhuǎn)其實(shí)很好做,只不過是改變縮放度大小,還有讓它隨著時(shí)間改變r(jià)otation而已。

OnMouseEnter():當(dāng)鼠標(biāo)進(jìn)入的時(shí)候,當(dāng)鼠標(biāo)進(jìn)入顯示物體邊緣的一瞬間,只執(zhí)行一次。

OnMouseExit():當(dāng)鼠標(biāo)退出的時(shí)候,當(dāng)鼠標(biāo)退出顯示物體邊緣的一瞬間執(zhí)行,只執(zhí)行一次。

OnMouseOver():當(dāng)鼠標(biāo)覆蓋在物體上的時(shí)候,只要鼠標(biāo)還覆蓋在物體上,就會不停的執(zhí)行,多次執(zhí)行。

如此就能實(shí)現(xiàn)旋轉(zhuǎn)和縮放。

2.旋轉(zhuǎn)和縮放完成了,那么接下來就該讓物體隨著拖動鼠標(biāo)進(jìn)行移動了。

在這里,使用射線可以實(shí)現(xiàn)。從攝像機(jī)直接發(fā)射出一條射線,打到屏幕內(nèi)物體上,就能檢測到對應(yīng)鼠標(biāo)的點(diǎn)應(yīng)該在3d世界中具體在哪個(gè)位置。

OnMouseDrag():當(dāng)鼠標(biāo)拖動的時(shí)候執(zhí)行,單機(jī)鼠標(biāo)左鍵,拖動物體的時(shí)候觸發(fā),會一直執(zhí)行,多次執(zhí)行。

Input.mousePosition:鼠標(biāo)所在位置,鼠標(biāo)在屏幕上的位置。

Ray ray = camera.ScreenPointToRay(Input.mousePosition);從照相機(jī)射出來的射線

if (Physics.Raycast(ray, out hit, 1000f, 1<<8))當(dāng)成功發(fā)出射線,一些碰撞信息都會保存在hit中,在這里射線的長度是1000,檢測和射線碰撞的層是第八層。

LayerMask.NameToLayer("Terrain")我這里自定義第八層layer為Terrain,所以打印出來的信息也是8,之前想要將這個(gè)放到Physics.Raycast最后一個(gè)參數(shù),發(fā)現(xiàn)并不好使。試驗(yàn)后才發(fā)現(xiàn)最后一個(gè)參數(shù)是通過位移得來的。

當(dāng)發(fā)生射線和地面碰撞的時(shí)候,就把改變物體的位置,這樣就能夠讓物體隨著鼠標(biāo)進(jìn)行拖動了。

Debug.DrawLine(ray.origin, hit.point, Color.red):這個(gè)只是畫一條線,方便進(jìn)行觀察,實(shí)際開發(fā)中并不需要,這是畫一條從射線發(fā)射點(diǎn)到碰撞點(diǎn)的紅色線段。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在我們的游戲開發(fā)過程中,有一個(gè)很重要的工作就是進(jìn)行碰撞檢測。例如在射擊游戲中子彈是否擊中敵人,在RPG游戲中是否撿...
    壹米玖坤閱讀 24,837評論 0 17
  • 知識點(diǎn):1、可以通過 Physics.RaycastAll獲取全部,然后通過tag或者name或者layer遍歷再...
    羅斯基閱讀 493評論 0 0
  • 本文來源于兩年前我的一篇CSDN博客。CSDN博客本來就沒寫多少,現(xiàn)在也基本是到簡書上混了。所以各位大大請自覺繞過...
    曉夢蟬君閱讀 42,931評論 5 12
  • Unity3D塔防開發(fā)流程 配置環(huán)境及場景搭建 編程語言:C#,略懂些許設(shè)計(jì)模式,如果不了解設(shè)計(jì)模式,BUG Mo...
    Grape_葡萄閱讀 3,110評論 1 3
  • 之所以稱我家公公為"太上皇",是因?yàn)樗俏粋鹘y(tǒng)的封建家長,在家里有著絕對的權(quán)威,是位"老子說了算"的老人。當(dāng)...
    開顏_ca57閱讀 540評論 4 4

友情鏈接更多精彩內(nèi)容