Unity3D中物體繞垂直於滑鼠劃過方向的軸的旋轉

2021-06-18 06:15:06 字數 1348 閱讀 2386

本篇文章和上篇文章相似都是做物體的運動,難點在於怎樣找到物體旋轉所要繞的是哪個方向上的軸。

比如滑鼠橫著劃過,那麼物體應該繞的是豎直方向上的軸;如果滑鼠從左上劃向右下,那麼物體繞的就應該是從右上到左下方向上的軸。

總結一下即是物體旋轉繞軸方向應該是垂直於滑鼠划動方向,重點就是求出這個方向。

同樣需要宣告兩個變數來儲存滑鼠移動時在螢幕上x方向y方向的偏移量

float yrotation = 0f;

float xrotation = 0f;

由於需要實現物體隨時間慢慢停下來的效果所以需要再宣告乙個變數儲存滑鼠划動的距離

float mousedistance;

需要計算方向,宣告兩個三維向量,乙個儲存滑鼠划動的方向,乙個儲存旋轉繞軸的方向

vector3 mousedirection = vector3.zero;

vector3 rotationdirection = vector3.zero;

然後在滑鼠左鍵按下去的時候開始記錄位移偏移量

yrotation = input.getaxis("mouse y");

xrotation = input.getaxis("mouse x");

並且以此計算出滑鼠划動的方向,因為是基於平面的(z軸為0)所以記錄滑鼠划動方向的三維向量應該是

mousedirection = new vector3(xrotation, yrotation, 0);

那麼滑鼠划動的距離就可以這樣計算出來

mousedistance = vector3.magnitude(mousedirection)*10;//該函式用於求三維向量的大小

重點來了,其實數學學的好的話,可以很明了的明白如何求出該方向向量,在這裡我們用到了空間向量的叉乘,即通過表示滑鼠划動方向的三維向量叉乘垂直於螢幕方向的三維向量,得出一條垂直於兩者的三位向量

rotationdirection = vector3.cross(mousedirection, vector3.forward);//該函式用於求三維向量的叉乘

當滑鼠左鍵鬆開之後物體開始旋轉並且越轉越慢最後停止。這個效果通過使上邊得到的滑鼠划動的距離慢慢減小實現

mousedistance = mathf.clamp(mousedistance-=0.1f, 0, mathf.infinity);//該數學函式表示的意思可以上聖典查,大致就是限制第乙個引數處於第二個和第三個之間

一切計算妥當之後,最後的旋轉實現如下

transform.rotate(rotationdirection, mousedistance, space.world);

ok!指令碼寫好,建乙個cube,附上指令碼,執行unity,按著滑鼠左鍵劃動滑鼠鬆開之後就可以實現所要效果啦~

Unity在地球上放置物體時使物體垂直於地面

向量a 地心指向地面點p的向量 向量b 地球正北方向的向量 這裡為向上 向量c 垂直於向量a和向量b所在平面的向量 vector3 a pointp myplanet.ins.transform.position vector3 b myplanet.ins.transform.up vector3...

Unity3D例項化物體

一 public gameobject itemprefab void store if transform.childcount 0 gameobject itemgameobject instantiate itemprefab as gameobject itemgameobject.tran...

unity3d中獲得物體的size

以size的x方向為例 1 gameobject.renderer.bounds.size.x 這個值的結果真實反應出有meshrenderer這個元件的模型的尺寸。不需要再乘以localscale.x。2 gameobject.getcomponent mesh.bounds.size.x 通過m...