扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这个在端游上比较场景,在角色展示的时候,当摄像头在角色身边上下左右旋转时,角色头部跟随镜头旋转。如天涯明月刀等。
成都创新互联服务项目包括荔湾网站建设、荔湾网站制作、荔湾网页制作以及荔湾网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,荔湾网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到荔湾省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!这个在手游上比较少见,不过实现也没什么区别。
首先一般情况下,找到模型的头部节点,直接用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;
这些都是方法。
因为是公司项目,具体就不方便展示了。
欢迎讨论
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流