Unity 拖拽物體時限制其沿直線運動

2021-08-19 19:39:29 字數 1212 閱讀 7227

在許多場景中,我們需要用到拖拽物體這個功能,有的時候我們需要拖拽的軌跡為一條直線,平穩地拖拽,但是單靠用手去拖拽是很難拖成直線的(除非你單身20年).這時我們可以將拖拽的點限定在一條直線或者向量上. 要實現這個功能只需你想要規定的那條直線或向量上的兩個點,和你所拖拽的物體的座標。思路是求出你所拖拽物體座標對應那條直線或向量的垂點(垂足).

如圖

想要物體沿著直線移動,即要物體的移動時的座標落在直線上

物體的座標為 vector3 posobj

直線上端點a vector3 posa

直線上端點b vector3 posb

所求目標點c vector3 posc

設物體為d點,

第一步

先求向量cd:①求出d點到向量ba的距離dis②求出與向量ba垂直的向量rightdis與 right相乘即可得到向量cd

第二步
求出向量da,直接用兩座標點相減即得

第三步
cd+da=ca,ca+ posa =poscposc就是我們要求的垂足座標,最後

gameobject.transform

.position = posc;

可能會有朋友會疑問何必如此麻煩,直接限定x或者z軸座標不就行了。如果這條直線是斜的,那麼直接限定x,z座標會變得複雜,何況動態環境下,直接計算點座標會省事許多。當然,這只是其中一種方法。

最後,這種方法還缺最後一步完善,那就是當你的物體在已知向量的兩側時,你是需要去判別左側或右側的,因為使用上述方法時,最需要注意的就是向量的方向了。具體如何判別,相信聰明的你們肯定會的。

unity 拖拽物體(避免穿牆)

拖拽物體 網上可查詢的比較多的方法原理 通過將滑鼠在螢幕上的座標轉化成3d座標,將位置偏移賦值給需要拖拽的物體,隨意在網上搜尋拖拽物體都可以找到,這裡就不掛 了,但是這樣的拖拽方式也有乙個問題,由於我們的拖拽物件是強制位移,所以在拖拽時會穿透其他的物體,比如我們要在乙個房間內拖動乙個cube,那麼這...

Unity中滑鼠左鍵按下,拖拽物體移動

把這段指令碼拖給想要拖拽的物體,然後加上碰撞盒就可以了。private vector3 vec3targetscreenspace 目標物體的螢幕空間座標 private vector3 vec3targetworldspace 目標物體的世界空間座標 private transform trans...

unity中基本座標轉換和物體的拖拽

1.螢幕轉世界座標 vector3 camera.main.screentoworldpoint 2.世界轉螢幕座標 vector3 camera.main.worldtoscreenpoint 3.世界轉視口座標 vector3 camera.main.worldtoviewportpoint 4...