現(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)的紅色線段。