我现在遇到的问题是:
1: ##摄像机跟随飞机没问题。但是当飞机围绕着x轴旋转,pitch= 正负90度时,绑定在飞机身上的摄像机的 rotation y z分量就会变为180 或者是02: ##通过鼠标右键控制飞机围绕x轴旋转,当pitch接近正负90度时,飞机就会无限在原处打转。松开右键后,过会朝其他方向移动鼠标,飞机转向才正常,但是始终无法越过90度。。。。我想解决的问题是:飞机能够根据鼠标的滑动方向,任意旋转而不受任何角度的限制,就好像自由枪骑兵游戏里面的那种操作方式。
已经纠结这个问题一天了。在群里也问了好久。问题还是没有解决。
下面的是代码::::::
1:下面这段代码是通过鼠标在屏幕的位置转化成世界坐标,让飞机看向这个坐标if (Input.GetButton("Fire2")) //当玩家点击右键时 { Vector3 lookpos = new Vector3(); lookpos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 100)); //鼠标当前位置转化为屏幕100前的世界坐标 Quaternion qua_look = Quaternion.LookRotation(lookpos - _Playerpilot.parent.position); //计算看向角度 _Playerpilot.rotation = Quaternion.Slerp(_Playerpilot.rotation, qua_look, Time.fixedDeltaTime * 20); //让飞机平滑过渡到目标方向 }
2:下面这段代码是将摄像机绑定在飞机的尾部偏上的位置void FixedUpdate() { if (!_Target) return; //以下代码是绑定摄像机在飞机的尾部,实际上是一个第三人称的摄像机
Quaternion lookAtrotation = Quaternion.LookRotation((_Target.transform.position + _Target.transform.forward * Offset.x) - _camera.position); //计算摄像机朝向向量 _thiscamera.rotation = Quaternion.Slerp(_thiscamera.rotation, lookAtrotation, Time.fixedDeltaTime * 20); //过渡到朝向向量 Vector3 positionTarget = _Target.transform.position + ((-_Target.transform.forward + _Target.transform.up * Offset.y) * Offset.z); //摄像机绑定位置 //// float _distance = Vector3.Distance(positionTarget, _thiscamera.position); _camera.position = Vector3.Slerp(_camera.position, positionTarget, Time.fixedDeltaTime * 50f); }



1: ##摄像机跟随飞机没问题。但是当飞机围绕着x轴旋转,pitch= 正负90度时,绑定在飞机身上的摄像机的 rotation y z分量就会变为180 或者是02: ##通过鼠标右键控制飞机围绕x轴旋转,当pitch接近正负90度时,飞机就会无限在原处打转。松开右键后,过会朝其他方向移动鼠标,飞机转向才正常,但是始终无法越过90度。。。。我想解决的问题是:飞机能够根据鼠标的滑动方向,任意旋转而不受任何角度的限制,就好像自由枪骑兵游戏里面的那种操作方式。
已经纠结这个问题一天了。在群里也问了好久。问题还是没有解决。
下面的是代码::::::
1:下面这段代码是通过鼠标在屏幕的位置转化成世界坐标,让飞机看向这个坐标if (Input.GetButton("Fire2")) //当玩家点击右键时 { Vector3 lookpos = new Vector3(); lookpos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 100)); //鼠标当前位置转化为屏幕100前的世界坐标 Quaternion qua_look = Quaternion.LookRotation(lookpos - _Playerpilot.parent.position); //计算看向角度 _Playerpilot.rotation = Quaternion.Slerp(_Playerpilot.rotation, qua_look, Time.fixedDeltaTime * 20); //让飞机平滑过渡到目标方向 }
2:下面这段代码是将摄像机绑定在飞机的尾部偏上的位置void FixedUpdate() { if (!_Target) return; //以下代码是绑定摄像机在飞机的尾部,实际上是一个第三人称的摄像机
Quaternion lookAtrotation = Quaternion.LookRotation((_Target.transform.position + _Target.transform.forward * Offset.x) - _camera.position); //计算摄像机朝向向量 _thiscamera.rotation = Quaternion.Slerp(_thiscamera.rotation, lookAtrotation, Time.fixedDeltaTime * 20); //过渡到朝向向量 Vector3 positionTarget = _Target.transform.position + ((-_Target.transform.forward + _Target.transform.up * Offset.y) * Offset.z); //摄像机绑定位置 //// float _distance = Vector3.Distance(positionTarget, _thiscamera.position); _camera.position = Vector3.Slerp(_camera.position, positionTarget, Time.fixedDeltaTime * 50f); }




