在許多場景中,我們需要用到拖拽物體這個功能,有的時候我們需要拖拽的軌跡為一條直線,平穩地拖拽,但是單靠用手去拖拽是很難拖成直線的(除非你單身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...