Unity物件up軸指向目的方向進行旋轉

2021-07-12 01:02:28 字數 1298 閱讀 8427

今天想搞個人物旋轉,但是需求比較特殊,座標軸整體旋轉了90度(artoolkit的神奇設定),如果正常情況下最簡單的做法就是lookat方法或者quaternion.fromtorotation方法就可以直接搞定了,然而座標旋轉90度之後,相當於up方向為人物的面朝方向,所以直接用這兩個方法就不行了,這兩個方法都是預設的讓物體的forward軸指向目標物體,所以要自己實現一套lookat方法,使物體旋轉,z軸指向目的物體。

自己實踐了很久,一直有問題,於是在網上查了查,大部分都是說lookat以及quaterntion.fromtorotation及其變種的,然而並沒有解決問題,最後找到了這篇文章:

void update () 

if(flagmove)

else

}}void raycontrol()

print(tempdir.y);

print("2:"+angle);

transform.rotatearound(transform.position,vector3.up,angle);

flagmove=true;

}}

然後就是我的問題了,讓物件的up方向指向目的地點:

//獲得方向

vector3 dir = transform.position - target.transform.position;

//z的值保持不變,只在xy方向上進行旋轉

dir.z = currentobject.transform.position.z;

//點乘計算兩個向量的夾角,及角色和目標點的夾角(本人的專案中-up軸是正方向)

float dotvalue = vector3.dot(-currentobject.transform.up, dir.normalized);

//獲得夾角值

float angle = mathf.acos(dotvalue) * mathf.rad2deg;

//用叉乘判斷兩個向量是否同方向

vector3 tempdir = vector3.cross(-currentobject.transform.up, dir.normalized);

if (tempdir.z < 0)//說明兩個向量方向相反,這個判斷用來確定假如兩個之間夾角30度 到底是順時 還是逆時針旋轉。

transform.rotatearound(currentobject.transform.position, vector3.forward, angle);

終於解決了這個困擾我兩天的問題了....

Unity 隱藏物件

以下是幾個網上都可以搜尋到的方法 比較實用的幾種 改position,移到視野外,推薦,最節省 gameobject.setactive false 要提前引用,要不你就改不回來了。renderer.enabled false 多個渲染器的話,遍歷 destroy 假如你不再用的話 改透明度rend...

unity獲取物件

unity提供了多種獲取某個物件的方法,1.gameobject.find name 2.gameobject.findgameobjectwithtag tag 3.gameobject.findwithtag tag find方法都是全場景尋找,算是unity裡最耗事的一種方法,通過tag尋找次...

物件銷毀 unity 物件銷毀報錯

其中 radarparent 物件是radarroot 這個gameobject.報錯前提 執行場景切換 報錯位置 villagegameui 執行ondestroy的時候radarparent null,執行到 radar.setparent radarparent 觸發異常 報錯原因 radar...