Unity3d 摄像机跟踪播放器抖动,视觉效果差

Unity3d 摄像机跟踪播放器抖动,视觉效果差,unity3d,Unity3d,我是一个初学者,有一个问题,相机跟踪球员,这是不稳定的。我有一个只在敲击时向上移动的玩家,还有其他在x方向移动的敌人。但是当玩家开始跳跃时,相机会开始急促的移动(特别是在敌人附近),同时也会对敌人的移动产生不良影响。下面是我的CameraFollow代码` public class CameraFollow : MonoBehaviour { [SerializeField] private float yMin; [SerializeField] private float yMax; [Se

我是一个初学者,有一个问题,相机跟踪球员,这是不稳定的。我有一个只在敲击时向上移动的玩家,还有其他在x方向移动的敌人。但是当玩家开始跳跃时,相机会开始急促的移动(特别是在敌人附近),同时也会对敌人的移动产生不良影响。下面是我的CameraFollow代码`

public class CameraFollow : MonoBehaviour {
[SerializeField]
private float yMin;
[SerializeField]
private float yMax;
[SerializeField]
private float xMin;
[SerializeField]
private float xMax;
private Transform target;


void Start () {     
    target = GameObject.Find("Player").transform;
    //player = GameObject.FindGameObjectWithTag("Player");
}

void LateUpdate () {        
    transform.position = new Vector3 (Mathf.Clamp(target.position.x, xMin, xMax), Mathf.Clamp(target.position.y, yMin, yMax), transform.position.z);        
    if (Input.GetKeyDown(KeyCode.Escape)){
        Application.Quit ();            
    }       
}

它抖动的原因是您直接设置摄影机的变换,而不是(例如)平滑地对其进行缩放

我建议使用

例如,而不是:

transform.position=new Vector3(Mathf.Clamp(target.position.x,xMin,xMax),Mathf.Clamp(target.position.y,yMin,yMax),transform.position.z)

试试下面这些句子:

Vector3 targetPos = new Vector3 (
    Mathf.Clamp(target.position.x, xMin, xMax),
    Mathf.Clamp(target.position.y, yMin, yMax),
    transform.position.z
    );

transform.position = Vector3.Lerp(transform.position, targetPos, 0.5f);

我希望这有帮助

它抖动的原因是您直接设置摄影机的变换,而不是(例如)平滑地对其进行缩放

我建议使用

例如,而不是:

transform.position=new Vector3(Mathf.Clamp(target.position.x,xMin,xMax),Mathf.Clamp(target.position.y,yMin,yMax),transform.position.z)

试试下面这些句子:

Vector3 targetPos = new Vector3 (
    Mathf.Clamp(target.position.x, xMin, xMax),
    Mathf.Clamp(target.position.y, yMin, yMax),
    transform.position.z
    );

transform.position = Vector3.Lerp(transform.position, targetPos, 0.5f);

我希望这有帮助

您是否可以花点时间单击“编辑”并从代码示例中删除不必要的空白/换行符?感谢请注意,平滑跟随脚本完全内置于unity中。。只需点击添加它。谷歌。“标准资产”你能给我提供链接吗?谢谢不,我不介意,对不起。。但是试着用谷歌搜索一下。你能花点时间点击编辑并从代码样本中删除不必要的空白/换行吗?感谢请注意,平滑跟随脚本完全内置于unity中。。只需点击添加它。谷歌。“标准资产”你能给我提供链接吗?谢谢不,我不介意,对不起。。但是试试谷歌,还是一样的。。当玩家接近敌人时,摄像机会突然移动。敌人在x方向移动,玩家在y方向移动。玩家在屏幕点击下跳跃。。公共向量2跳跃力=新向量2(0200);void Start(){}void Update(){if(Input.GetMouseButtonDown(0)){GetComponent().velocity=Vector2.zero;GetComponent().AddForce(jumpForce);}}}}。您是否可以尝试降低lerp因子,即使用0.1f(或更小,如果仍然不稳定)作为lerp函数的第三个参数?尝试尝试使用lerp因子,直到您发现它足够平滑,但仍然不会太快或太慢。让我知道它是否有效。@Syedmuhammaddalmanshah太好了。我强烈建议您先从网上学习一些教程,这样您就可以在尝试自己的实验之前掌握最常见的统一机制。祝你一切顺利!:)还是一样。。当玩家接近敌人时,摄像机会突然移动。敌人在x方向移动,玩家在y方向移动。玩家在屏幕点击下跳跃。。公共向量2跳跃力=新向量2(0200);void Start(){}void Update(){if(Input.GetMouseButtonDown(0)){GetComponent().velocity=Vector2.zero;GetComponent().AddForce(jumpForce);}}}}。您是否可以尝试降低lerp因子,即使用0.1f(或更小,如果仍然不稳定)作为lerp函数的第三个参数?尝试尝试使用lerp因子,直到您发现它足够平滑,但仍然不会太快或太慢。让我知道它是否有效。@Syedmuhammaddalmanshah太好了。我强烈建议您先从网上学习一些教程,这样您就可以在尝试自己的实验之前掌握最常见的统一机制。祝你一切顺利!:)