91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

【小松教你手游開發】【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

随州市| 治多县| 平陆县| 淮阳县| 余姚市| 秀山| 宁远县| 兰溪市| 米泉市| 自治县| 郴州市| 临泽县| 东至县| 大英县| 镇雄县| 焉耆| 黄山市| 长宁县| 布拖县| 洛川县| 日喀则市| 鸡东县| 营口市| 东城区| 聂荣县| 花垣县| 云和县| 通州区| 波密县| 上犹县| 通渭县| 双牌县| 尚义县| 从江县| 山阴县| 大足县| 临西县| 灵璧县| 苍梧县| 崇礼县| 玉山县|