1. 程式人生 > >Game面板實現鼠標拖拽物體

Game面板實現鼠標拖拽物體

知新樹 寧金峰

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

技術分享

那我們現在想要實現在Game面板實現鼠標拖拽物體應該如何實現?其實代碼很簡單。直接上圖:

技術分享

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

技術分享技術分享

主要方法是用了協同函數。OnMouseDown()是一個鼠標觸發的回調函數。不用調取該方法即可實現。所以沒有寫開啟協同。

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

while循環當鼠標按下時即進入,因為一直按住,bool值永遠為true,但由於協同,每一幀都要跳出該函數,所以不會出現死循環。最後是等待FixedUpdate()函數。這個直接寫yield return null也是可以實現的。目的只是跳出該協同,然後下一幀再進入。

這就是簡單的實現鼠標拖拽物體了。


本文出自 “13233523” 博客,請務必保留此出處http://13243523.blog.51cto.com/13233523/1974705

Game面板實現鼠標拖拽物體