在自上而下的射击游戏中,角色一直在晃动
本文关键字:一直 角色 自上而下 射击游戏 | 更新日期: 2023-09-27 18:18:24
好吧,我正在制作一个自上而下的射击游戏,我让我的角色用屏幕世界观看着鼠标,我让我的相机跟随我的玩家x轴和z轴,但每当我的角色从鼠标平行移动时,它就会开始摇晃,我认为这是因为它看着鼠标,鼠标的真实世界位置取决于相机的位置,但我不确定。
这里是playerscript许多反斜杠显示了我尝试过的其他东西
gameObject.GetComponent<Rigidbody>().velocity = new Vector3(Input.GetAxisRaw("Horizontal")*movementspeed,0,Input.GetAxisRaw("Vertical")*movementspeed);
if (gameObject.GetComponent<Rigidbody> ().velocity.x != 0 && gameObject.GetComponent<Rigidbody> ().velocity.z != 0) {
gameObject.GetComponent<Rigidbody>().velocity = new Vector3(Input.GetAxisRaw("Horizontal")*movementspeeddiag ,0,Input.GetAxisRaw("Vertical")*movementspeeddiag);
}
// makes vector 3 type target equall to mouse position on pixial cordinates converted in to real world coordniates
target = camera.ScreenToWorldPoint (new Vector3(Input.mousePosition.x,Input.mousePosition.y,camera.transform.position.y - transform.position.y));
//Vector3 newtarget = target - transform.position;
//lerptarget = Vector3.Lerp (transform.eulerAngles,newtarget, 100);
// states the vector 3 values of target
// makes object local z face target and iniziates up axis
//Quaternion rotation = Quaternion.LookRotation (newtarget, Vector3.up);
//transform.eulerAngles = Vector3.up * Mathf.MoveTowardsAngle (transform.eulerAngles.y, rotation.eulerAngles.y, rotatespeed * Time.deltaTime);
transform.LookAt (target,Vector3.up);
和镜头脚本
void LateUpdate(){
position = new Vector3 (player.transform.position.x, 10, player.transform.position.z);
transform.position = position;
//transform.localPosition = Vector3.Lerp (transform.position, position, speed *Time.deltaTime);
transform.eulerAngles = new Vector3 (90,0,0);
}
问题可能是你改变了刚体的速度。因为速度变化应用于每个固定的更新时间间隔,它不匹配帧更新时间,并可能导致抖动。根据unity文档,你应该尽量避免直接改变速度。(http://docs.unity3d.com/ScriptReference/Rigidbody-velocity.html)
我建议你使用MovePosition与Lerp函数一起实现玩家移动。看到这个:http://docs.unity3d.com/ScriptReference/Rigidbody.MovePosition.htmlhttp://docs.unity3d.com/ScriptReference/Vector3.Lerp.html