人物朝向問題

2021-07-25 14:17:36 字數 1520 閱讀 9637

float

lenghtx =

m_attackmonomermajor

->

getpositionx

() -

this

->

getpositionx

();

//平方根函式

sqrtf

,根號2

等於1.4142135623731

float

lenghty = (

m_attackmonomermajor

->

getpositiony

() -

this

->

getpositiony

()) *

sqrtf(2

); float

lenght =

sqrtf

(lenghtx * lenghtx + lenghty * lenghty);

float

pointx = lenghtx / lenght;  

//鄰邊/斜邊

float

pointy = lenghty / lenght;  

//對邊/斜邊

float

angle_x =

acosf

(pointx) *

180/

m_pi

;   

//角度

float

angle_y =

acosf

(pointy) *

180/

m_pi;

float

angle = angle_x; if

(angle_y > 90)

/**

這裡要借助三角函式來判斷滑鼠當前相對於人物的方向,也就是要求出下圖中角

a的值。

flash

的座標系和常用的直角座標系稍有不同,它的

y軸正方向是向下的,這裡要稍微注意一下。要計算角

a,先求出兩直角邊nx、

ny以及斜邊

r,然後求余弦

cos(a) = nx / r

,最後求反余弦並取整。取整是為了節省運算,整數運算相對於浮點運算要快得多,這在有大量運算時尤為突出。另外需要注意的是當滑鼠位於

x軸之上時,角

a會大於

180度,而反三角函式只給出

0~180

的解,所以需要做乙個轉換:

a = 360 - a

。詳細計算**如下:

var nx:number=mou***-man.x;

var ny:number=mousey-man.y;

var r:number=math.sqrt(nx*nx+ny*ny);

var cos:number=nx/r;

var angle:int=int(math.floor(math.acos(cos)*180/math.pi));

if(ny<0) */

主角人物移動(二) 朝向目標點

定義乙個gameobject,用於旋轉的物件。旋轉的物件最好為主角的子物件,如果旋轉的物件與移動的物件在同一transfrom,則會導致移動的混亂,因為旋轉的同時旋轉了座標的朝向。public gameobject playerrot transform.forward 為物件的正方向 若未改變y軸...

怪物朝向處理

目的是處理怪物一變走,一邊看向某個地方,這裡是攝像頭,指令碼放在怪物身上 debug.log camera.main.transform.position camera.main.transform.position quaternion newrotation quaternion.lookrot...

人物瞄準鬼畜問題

人物瞄準近距離的位置會出現鬼畜情況 根據 分析,發現如果diretion的起始位置為muzzleloc時 人物瞄準近距離時會鬼畜,而使用pawnloc時則不存在這樣的問題,問題在於muzzlelocation是乙個實時變動的值,它附著於人物 的槍口上,所以在瞄準近距離的地方時,方向向量的變化會非常大...