【小松教你手游开发】【unity实用技能】角色头部跟随镜头旋转
admin
2023-02-11 13:40:05
0

这个在端游上比较场景,在角色展示的时候,当摄像头在角色身边上下左右旋转时,角色头部跟随镜头旋转。如天涯明月刀等。

这个在手游上比较少见,不过实现也没什么区别。

首先一般情况下,找到模型的头部节点,直接用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;  

这些都是方法。

因为是公司项目,具体就不方便展示了。
欢迎讨论

相关内容

热门资讯

澳大利亚工党大会上,中方官员愤... 据澳大利亚广播公司(ABC)7月23日报道,中国外交官因不满台湾地区代表出席澳大利亚工党(ALP)在...
裸体在家犯法还是拍别人裸照犯法... 近日,#男子在家裸体被邻居拍照发群#一事引发热议。据报道,某小区一名男业主在家中未穿衣物,对面女业主...
“每天跟遛狗一样”,万亿资金,... 进入7月,市场波动加大,A股关于量化交易的争议再次达到顶峰。由于散户与量化机构之间的“体感温差”显著...
特朗普:对伊朗战争进展顺利 当地时间7月23日,美国总统特朗普再次称,“美国在对抗伊朗方面进展很顺利,表现得极其出色,好得超乎任...
国务院成立广西六蓝水库溃坝灾害... 7月6日,广西南宁横州市六蓝水库发生溃坝,造成重大人员伤亡。根据国家有关法律法规规定,国务院成立调查...
倚美搞事,菲律宾政府连“为奴”... 南海的风浪,很大一部分是菲律宾政府自己搅起来的。近年来,菲政府在仁爱礁、黄岩岛等地小动作频频,不仅频...
雨花台区企业摘得国家科学技术进... 晨报讯(南京晨报/爱南京记者 陈彦)记者从南京市雨花台区获悉,在新近揭晓的2025年度国家科学技术奖...
美国公布新关税措施,日本、澳大... 据法新社、澳大利亚广播公司(ABC)报道,针对美国将于美东时间24日以所谓“强迫劳动”为名对数十个国...
济南大数据集团激活数据要素潜能... 走进“泉数汇·数港”线下体验空间,健康画像、求职背调、“泉涌”工作站等数据产品一字排开,来访者可以像...
太保寿险河南分公司举办员工家庭... 5月22日,中国太保寿险河南分公司在郑州举办绩优干部员工家庭开放日活动,邀请员工家属走进企业,参观办...