Unity下使用代码控制标准资源包下的FirstPersonCharacter任务移动和旋转会出现镜头跳动的情况

情况如题,在使用unity提供的这个第一人称时,我使用DOMOve和DORote来改变位置和旋转,人物可以顺利移动过去,但是我又开始移动鼠标旋转摄像头时,镜头会忽然跳动一下;发现是摄像机的Rotation又变回了移动前的旋转角度,要解决这个问题需要在移动完人物之后将摄像机的旋转值重新初始化一次,这样就不会出现这种问题了,而初始化的方法,在FirstPersonController这个脚本中就已经给我们写好了,只需要在调用一次就好了。

this.transform.DORotate(p1.Rot, 0.1f).OnComplete(() 
               => { this.transform.GetComponent<UnityStandardAssets.Characters.FirstPerson.FirstPersonController>().InitRotation(); });

这样操作之后发现一个问题,就是发现偶尔会出现移动完之后视角并不是跟预先选好的一样的。但是在inspector面板下看物体的pos和rot的值确实没错,这是因为unity提供的第一人称包括两部分,FPSController和FirstPersonCharacter,我理解为身体和眼睛(也就是摄像机),刚刚我们只是移动了身体而已,我们要实现最准确的视角还需要修改一下FirstPersonCharacter这个物

体的Rot值,所以在刚刚的初始化命令之前再加上一句

this.transform.Find("FirstPersonCharacter").transform.rotation = Quaternion.Euler(
               Vector3.Lerp(this.transform.Find("FirstPersonCharacter").transform.rotation.eulerAngles,new Vector3(
                   p1ChildX,
                   this.transform.Find("FirstPersonCharacter").transform.rotation.eulerAngles.y,
                   this.transform.Find("FirstPersonCharacter").transform.rotation.eulerAngles.z), 1f)
               );

这里为了使移动过程看上去更加连贯加上Vector.Lerp.最终代码就是这样了

this.transform.DOMove(Vector3.Zero, 0.1f);
            this.transform.Find("FirstPersonCharacter").transform.rotation = Quaternion.Euler(
                Vector3.Lerp(this.transform.Find("FirstPersonCharacter").transform.rotation.eulerAngles,new Vector3(
                    p1ChildX,
                    this.transform.Find("FirstPersonCharacter").transform.rotation.eulerAngles.y,
                    this.transform.Find("FirstPersonCharacter").transform.rotation.eulerAngles.z), 1f)
                );
 
            this.transform.DORotate(p1.Rot, 0.1f).OnComplete(() 
                => { this.transform.GetComponent<UnityStandardAssets.Characters.FirstPerson.FirstPersonController>().InitRotation(); });


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值