在2D中的相机移动期间在Unity中抽动对象

时间:2016-02-02 15:58:06

标签: unity3d camera 2d rendering transform

我正在使用Windows 7旗舰版(SP1), Unity 5.3.2(也用5.3.0,5.3.1,5.2.4测试)。

我造成了一个在编辑器,独立版本,Android版本中可见的错误。

简单的sceene包含:   Sphere - 没有球形colider的GameObject 带有 Rigidbody2D的动作脚本使用

private Rigidbody2D m_rigidbody;

void Start() {
    m_rigidbody = GetComponent<Rigidbody2D>();
}

void Update() {
    if (Input.GetAxis("Horizontal") > 0) //RIGHT
    {
        m_rigidbody.velocity = new Vector2(1, 0);
    } else if (Input.GetAxis("Horizontal") < 0) //LEFT
    {
        m_rigidbody.velocity = new Vector2(-1, 0);
    }
    else
    {
        m_rigidbody.velocity = new Vector2(0, 0);
    }
}

3立方体 - 静态游戏对象(为了看到该球体正在移动的abillity) MainCamera - 经典相机,随后使用CS脚本:

public Transform m_Target;

void Update () {
    transform.position = Vector3.Lerp(transform.position, new Vector3(m_Target.position.x, transform.position.y, transform.position.z), 1f);
}

问题:当相机移动时,我们可以看到,(静态)GameObjects在屏幕上“抽搐”......

我在脚本中使用了FixedUpdate(没有解决问题)。

使用不同的Interpolate设置:甚至用于(球体和相机)运动Rigidbody2D Extrapolate设置(没有解决问题)。

尝试使用Rigidbody(而不是os Rigidbody2D)。

我发现了类似问题Link to unity3d.ru forum

(没解决问题)

更新: 我已将动作脚本设置为相机并关闭“相机跟踪”。只是简单的标准相机向右(或向左)移动,速度和结果不变 - 静态物体在抽搐......

1 个答案:

答案 0 :(得分:0)

在您的代码中,

transform.position = Vector3.Lerp(transform.position, new Vector3(m_Target.position.x, transform.position.y, transform.position.z), 1f);

...你的插值因子是1f。这只会让它直接跳到目标值而不是 lerping 它。我建议将其更改为其他内容,例如0.75f。也就是说,

transform.position = Vector3.Lerp(transform.position, new Vector3(m_Target.position.x, transform.position.y, transform.position.z), 0.75f);

我希望有所帮助!