求助,物体旋转后会回转,如何减少回转或锁定角度?

[复制链接]
查看11 | 回复0 | 2021-1-27 05:07:24 | 显示全部楼层 |阅读模式
在学习unity旋转物体的时候发现一个问题:
当按住W,物体朝前,旋转的Y轴为0。
当按住D,物体朝右,旋转的Y轴为90。

当同时按住W和D不放的时候物体朝向右前方45度,旋转的Y轴为45度。

当松开的时候,出现错误,物体会回转,角度不会保持在45度了(如果不设置平滑旋转物体会瞬间回到0度或者90度,错误表现非常明显)

错误原因好像是:
人们一般很难同时一瞬间松开两个按钮,如松开D按钮比松开W按钮慢了0.1秒,物体瞬间从45度变成90度了。
如果设置了平滑旋转和旋转速度的话,旋转速度越小回转速度越慢,如同时松开快的话物体可能回转到40度或者50度甚至更小,回转不会很明显,如果松开慢的话,有时会回转10度以上就很明显了;
另一个问题是如果速度过小,回转不明显了,但是物体转身就会非常慢,控制会非常不灵活。
另一个问题就是W+D和W和D的按钮重叠

对比发现现在大部分游戏(包括单机网游手游等)都不会回转,松开后依然保持45度角度,角度就像锁住的一样,即时2个按钮放的慢,也不会回转,但又不影响W和D
很多游戏里:W,S,A,D角色面向前,向后,向左,向右(有很多是瞬转),一般相邻的两个键如W和D,角色会朝右前方
后来又发现有的比较早期的网游,放开两个按钮后,角色会瞬间回正,保持朝前

求助各位高手如何像大部分游戏一样即使松开的慢,物体也依然保持住右前的角度或者锁定角度?谢谢

代码如图:








//旋转速度
publicfloatspeed=19;
//向量
publicVector3v3=Vector3.zero;

floath=Input.GetAxis("Horizontal");
floatv=Input.GetAxis("Vertical");
v3=newVector3(h,0,v);
v3.Normalize();
if(h!=0||v!=0)
{
//朝向
Quaterniona=Quaternion.LookRotation(v3);

//平滑旋转
Quaterniona1=Quaternion.Lerp(transform.rotation,a,speed*Time.deltaTime);
transform.rotation=a1;

////这个不用平滑旋转,当松开W和D键的时候,物体会瞬间回转到0度或者90度
//Quaterniona=Quaternion.LookRotation(v3);
//transform.rotation=a;

分 -->
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行