溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Game面板實現(xiàn)鼠標(biāo)拖拽物體

發(fā)布時間:2020-08-16 16:39:17 來源:網(wǎng)絡(luò) 閱讀:428 作者:寧金峰 欄目:建站服務(wù)器

大家都知道在Unity 場景面板(Scene面板)可以實現(xiàn)拖拽物體。具體操作步驟是變換工具欄選擇“手”的拖拽工具(或者快捷鍵“Q”)之后,直接用鼠標(biāo)左鍵按住竟可以實現(xiàn)拖拽物體。當(dāng)然這樣的效果實際上并不是實現(xiàn)了拖拽物體,因為物體的位置是沒有變化的。它實際上就是移動我們的當(dāng)前場景,看起來在拖拽物體似的。如圖:

Game面板實現(xiàn)鼠標(biāo)拖拽物體

那我們現(xiàn)在想要實現(xiàn)在Game面板實現(xiàn)鼠標(biāo)拖拽物體應(yīng)該如何實現(xiàn)?其實代碼很簡單。直接上圖:

Game面板實現(xiàn)鼠標(biāo)拖拽物體

如圖,我們將該腳本掛在想要拖拽的物體上(必須掛在要被拖拽的物體上才能實現(xiàn))。然后點擊運行后,將鼠標(biāo)指針放到該物上,按住左鍵即可實現(xiàn)。如圖:

 

Game面板實現(xiàn)鼠標(biāo)拖拽物體Game面板實現(xiàn)鼠標(biāo)拖拽物體

主要方法是用了協(xié)同函數(shù)。OnMouseDown()是一個鼠標(biāo)觸發(fā)的回調(diào)函數(shù)。不用調(diào)取該方法即可實現(xiàn)。所以沒有寫開啟協(xié)同。

該方法在鼠標(biāo)指針在該物體上按下時即可觸發(fā)一次。然后我們需要求出鼠標(biāo)位置和被拖拽的物體之間的距離,這樣拖拽時只要保持兩者距離不變即可。又因為鼠標(biāo)在屏幕坐標(biāo)系,物體在世界坐標(biāo)系。所以需要兩者之間的轉(zhuǎn)換。都轉(zhuǎn)成世界坐標(biāo)系之后進(jìn)而求出兩者之間的距離(具體細(xì)節(jié)圖片注釋均已指出)。

while循環(huán)當(dāng)鼠標(biāo)按下時即進(jìn)入,因為一直按住,bool值永遠(yuǎn)為true,但由于協(xié)同,每一幀都要跳出該函數(shù),所以不會出現(xiàn)死循環(huán)。最后是等待FixedUpdate()函數(shù)。這個直接寫yield  return null也是可以實現(xiàn)的。目的只是跳出該協(xié)同,然后下一幀再進(jìn)入。

這就是簡單的實現(xiàn)鼠標(biāo)拖拽物體了。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI