Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用鼠标控制相机旋转的一致性_C#_Unity3d - Fatal编程技术网

C# 使用鼠标控制相机旋转的一致性

C# 使用鼠标控制相机旋转的一致性,c#,unity3d,C#,Unity3d,到目前为止,学习unity,相机与鼠标的旋转是给我带来最多问题的事情。现在我面临的问题是,在制作基于刚体的第一人称控制器时,角色和相机用鼠标的旋转是不一致和抖动的 这就说明了问题所在。在其中,我平稳地移动鼠标,但旋转似乎有时会跳过一些中间旋转并跳转到新值 这是我当前用于角色以及附加组件的层次结构: 这是脚本的完整代码 使用系统集合; 使用System.Collections.Generic; 使用UnityEngine; [RequiredComponent(typeof(刚体)、typeof

到目前为止,学习unity,相机与鼠标的旋转是给我带来最多问题的事情。现在我面临的问题是,在制作基于刚体的第一人称控制器时,角色和相机用鼠标的旋转是不一致和抖动的

这就说明了问题所在。在其中,我平稳地移动鼠标,但旋转似乎有时会跳过一些中间旋转并跳转到新值

这是我当前用于角色以及附加组件的层次结构:

这是脚本的完整代码

使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
[RequiredComponent(typeof(刚体)、typeof(对撞机))]
公共类CompleterB控制器:MonoBehavior
{
[标题(“引用的组件:”)]
[序列化字段]
私人刚体;
[序列化字段]
私有转换(camerattransform);;
[标题(“鼠标设置”)]
公共浮点数_鼠标灵敏度=100f;
[序列化字段]
专用浮动螺距=0f;
[序列化字段]
private bool_mouseInverted=假;
[标题(“参数:”)]
[序列化字段]
专用浮子_速度=10f;
[序列化字段]
专用浮球_sprintSpeed=15f;
//在第一帧更新之前调用Start
void Start()
{
Cursor.lockState=CursorLockMode.Locked;
}
//每帧调用一次更新
无效更新()
{
}
私有void FixedUpdate()
{
//获取输入鼠标
float mouseX=Input.GetAxisRaw(“鼠标X”)*\u mouseSensitivity*Time.fixedDelatime;
float mouseY=Input.GetAxisRaw(“鼠标Y”)*\u mouseSensitivity*Time.fixedDelatime;
//获取输入键盘
float vertical=Input.GetAxisRaw(“垂直”);
float horizontal=Input.GetAxisRaw(“水平”);
//Log(string.Format(“垂直:{0},水平:{1}”,垂直,水平));
bool isSprinting=Input.GetKey(KeyCode.LeftShift);
//轮换
音高+=(\u鼠标已转换)?-鼠标:鼠标;
节距=主夹钳(节距-89,89);
_cameraTransform.localRotation=四元数.Euler(螺距,0,0);
transform.Rotate(transform.up*mouseX);
//移动
向量3移动=(transform.forward*垂直+transform.right*水平)。标准化*((isSprinting)?\u sprint速度:\u速度);
_rb.velocity=新矢量3(move.x,_rb.velocity.y,move.z);
}
}
我还将添加一个列表,列出我试图更改以使其顺利进行的事项:

  • 使用getAxis更改getAxisRaw。对摄影机移动的平滑度没有影响
  • 勒平垂直旋转。增加了太多的延迟,似乎真的不适合FPS控制器?我怎样才能避免偏航
  • 将旋转从FixedUpdate移动到Update。不做任何事情,我们正在编辑刚体,所以最好在fixedUpdate上进行所有其他与物理相关的计算
  • 制作单独的组件,一个用于旋转,另一个用于移动。这也无济于事
有时在模拟的第一秒钟,我确实工作顺利,但过了一会儿,它又变得不稳定了

我真的不知道如何解决它/是什么引起了问题。如果你能帮我解决这个问题,或者让我正确理解这个问题,我将不胜感激


提前感谢您的帮助。

只要FixedUpdate与帧/Update()的更新不匹配,就会发生跳过。这就是为什么你应该把所有与输入相关的东西放在更新中,把所有与物理相关的东西放在固定更新中。我建议您使用Inputmanager方法和CalculateMovement方法。然后将Inputmanager方法置于Update中,将CalculateMovement方法置于FixeUpdate中。此外,Time.fixedDeltaTime与Time.DeltaTime不相同如果您将输入置于Update而不是FixeUpdate,则必须将其改为Time.DeltaTime。希望我能帮助您!:)

尝试将相机移动置于
LateUpdate()
中。我不确定给定代码的结果,因为我不知道整个项目是如何设置的,但这可能会有所帮助。另一件事是所有输入代码都应该在
Update()
中,而不是
FixedUpdate()
。仅对
FixedUpdate()
使用物理计算。我会将您的输入作为变量存储在
Update()
中,在
FixedUpdate()
中更新您的移动,并在
LateUpdate()
@teebkne中更新相机谢谢您的建议!它确实降低了紧张的效果,并为脚本的执行增加了更好的顺序,谢谢!谢谢你解释为什么会产生这种效果,用@teebkne的变化来改变你说的东西,解决了这个问题。