亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

【小松教你手游開發】【unity實用技能】角色頭部跟隨鏡頭旋轉

發布時間:2020-03-07 02:33:10 來源:網絡 閱讀:1697 作者:xiaosongfang 欄目:游戲開發

這個在端游上比較場景,在角色展示的時候,當攝像頭在角色身邊上下左右旋轉時,角色頭部跟隨鏡頭旋轉。如天涯明月刀等。

這個在手游上比較少見,不過實現也沒什么區別。

首先一般情況下,找到模型的頭部節點,直接用lookAt指向camera就可以了,不過一般需求不會這么簡單。

比如說,超過頭部扭動極限,頭部需要插值回到原始點;當鏡頭從外部回到極限內,需要插值回來。這時候lookat就沒法使用。

更有情況,頭部本身坐標系不在世界坐標軸上, 可能旋轉了90多或者輸出的prefab就是歪的等等,這些情況都沒辦法使用lookAt。

所以還是自己來寫吧。

這里有兩個選擇,一個用四元數rotation,一個用歐拉角localEulerAngles。

兩者就像網上所說,各有好壞

歐拉角的值就是在unity上inspector的值,非常直觀。

但是最大的問題就是會死鎖。并且這個沒什么方法解決。

如果使用的話方式是這樣,直接賦值

SceneCameraObject.transform.localEulerAngles = tar;  

第二種就是選擇用四元數取旋轉。

這里使用的方式是

mHead.rotation = Quaternion.AngleAxis(rot.x -180, -mHead.right) * mHead.rotation;//傳遞過來的數據多了180,所以需要剪掉  
mHead.rotation = Quaternion.AngleAxis(rot.y, mHead.forward) * mHead.rotation;  

在上下左右兩個方向上,旋轉給定的角度。
這個好處也很明顯,給定角度按軸旋轉。

*這里看到上面注釋了一個180度相關,這個等下再講。

我們選擇的是第二種,四元數旋轉

所以關鍵就是有偏移角度

這個主要看你的數據來源,既然是做頭部跟隨鏡頭旋轉,一般就是由于你的手指拖動導致鏡頭旋轉,

所以我們取得是手指拖動的數據后的坐標,減去原始坐標的x,y。取得橫向縱向的角度偏移值。傳過來。

正常來說這樣就可以旋轉了。

接下來是要插值移動,讓頭部轉動的更加真實。

插值無非是調用Vector3.SmoothDamp或者Mathf.SmoothDamp。定義幾個變量,這里可以看我另一篇文章

【小松教你手游開發】【unity實用技能】unity 更漂亮的位移
http://blog.csdn.net/chrisfxs/article/details/50436738

但是這里會出現一個很嚴重的問題。就是由于0度就是360度。假如你從10度減到負數,會自己換算成360度時,就是本來從10插值到-10.結果變成從10插值到350。。。
這時候能想象到,本來向左轉的過程中,突然頭部反向旋轉360度。。。

所以就出現了上面的-180這個數。

因為我發現,0度這個臨界值在我的正前方。而按照需求,我的正后方我是不需要旋轉的。所以我只要把臨界值放到后面就好了。

真是機智如我啊

所以在傳過來的值中,每個橫向的拖動差值我都加了180度。

float degressX = angle2.x - angle1.x;  
float degressY = angle2.y - angle1.y + 180;//加180是為了把臨界點放在身子后面,好處理  

Vector3 vec = new Vector3(degressX,degressY,0);  
GameSystemBase.GameModelSys.RotateHead(vec);  

所以在最后旋轉的時候就要減回來。
完美實現。

*中間可以還有一些負數什么的問題,盡量都讓他成正數去解決

float value = tar.y > 0 ? tar.y % 360 : 360 + tar.y% 360;  
mCurrVec3.x =  mCurrVec3.x < 0 ? mCurrVec3.x + 360 : mCurrVec3.x;  

這些都是方法。

因為是公司項目,具體就不方便展示了。
歡迎討論

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

顺昌县| 磴口县| 贡嘎县| 炉霍县| 滕州市| 三门县| 博野县| 平山县| 堆龙德庆县| 开平市| 武义县| 晋中市| 惠水县| 永吉县| 道孚县| 永清县| 哈密市| 新余市| 陆河县| 新平| 安吉县| 保山市| 霍城县| 平潭县| 施秉县| 玉门市| 葵青区| 通渭县| 织金县| 鱼台县| 邢台市| 乌什县| 潮州市| 云霄县| 河津市| 澄江县| 上杭县| 花莲市| 南昌市| 八宿县| 冀州市|