我正在做一个2D自上而下的游戏,当玩家在世界各地移动时,玩家可以围绕自己旋转相机 .
当玩家在世界各地移动时,一切都运行良好,相机跟着他很好 . 如果他站着不动,那么相机旋转也能很好地工作 . 然而,一旦我开始做这两件事,那么相机中就会有一种紧张情绪,使得所有其他物体在玩家之外抖动 .
现在我正在处理这个问题,我发现这可能与我使用rigidbody2d.AddRelativeForce(物理学)移动玩家以及在FixedUpdate中检查他的动作这一事实有关 .
https://forum.unity3d.com/threads/camera-jitter-problem.115224/ http://answers.unity3d.com/questions/381317/camera-rotation-jitterness-lookat.html
我已经尝试将我的相机旋转和以下脚本移动到LateUpdate,FixedUpdate,更新你的名字 . 似乎没什么用 . 我确信在相机移动和引起这种情况的旋转之间存在某种延迟 . 我想知道是否有人有任何反馈意见?
我已经尝试禁用Vsync,并没有完全删除它我已经尝试插值和外推刚体,虽然有一个区别,它不会完全删除它 . 具有讽刺意味的是,如果我将它设置为无,那么效果最好 .
脚本:
To Follow character, script applied to a gameobject that has the camera as a child
public class FollowPlayer : MonoBehaviour {
public Transform lookAt;
public Spawner spawner;
private Transform trans;
public float cameraRot = 3;
private bool smooth = false;
private float smoothSpeed = 30f;
private Vector3 offset = new Vector3(0, 0, -6.5f);
//test
public bool changeUpdate;
private void Start()
{
trans = GetComponent<Transform>();
}
private void FixedUpdate()
{
CameraRotation();
}
private void LateUpdate()
{
following();
}
public void following()
{
Vector3 desiredPosition = lookAt.transform.position + offset;
if (smooth)
{
transform.position = Vector3.Lerp(transform.position, desiredPosition, smoothSpeed);
}
else
{
transform.position = desiredPosition;
}
}
void CameraRotation()
{
if (Input.GetKey("q"))
{
transform.Rotate(0, 0, cameraRot);
}
if (Input.GetKey("e"))
{
transform.Rotate(0, 0, -cameraRot);
}
}
public void SetTarget(string e)
{
lookAt = GameObject.Find(e).GetComponent<Transform>();
}
} The character Controller, script applied to the Player, is called in FixedUpdate
private void HandleMovement()
{
if (Input.GetKey("w"))
{
rigid.AddRelativeForce(Vector2.up * speed);
}
if (Input.GetKey("s"))
{
rigid.AddRelativeForce(Vector2.down * speed);
}
if (Input.GetKey("a"))
{
if (facingRight)
{
Flip();
}
rigid.AddRelativeForce(Vector2.left * speed);
}
if (Input.GetKey("d"))
{
if (!facingRight)
{
Flip();
}
rigid.AddRelativeForce(new Vector2(1,0) * speed);
}
}
2 回答
尝试使用协同程序 . 我修改了一些我的脚本,使你的代码更熟悉,尝试过,我没有看到任何紧张 . 我希望这会对你有所帮助 .
相机类:
玩家类:
}
我终于解决了这个问题:
首先,我将cameraRotation()和follow()转换为1个函数,并给它一个更清晰的名字:
然后我在处理运动后直接从角色控制器调用该函数 . 两个在fixedUpdate中调用(handleMovement和cameraPosition) .
而且抖动消失了 .
所以这似乎是暗示的,因为我之前发布的帖子曾说过两次通话之间有一点延迟 . 但是我无法将它们合适地设置得足够接近 .
希望这有助于某人 .