【问题标题】:Why incrementing transform.position in unity causes jitter on iOS?为什么统一增加 transform.position 会导致 iOS 抖动?
【发布时间】:2015-11-16 06:07:26
【问题描述】:

我在使用一个简单的脚本时遇到了一些问题,这会导致精灵出现抖动。脚本所做的只是:

public float speed; 

void Update () 
{ 
    var pos = transform.position;
    pos.y += speed * Time.deltaTime;
    transform.position = pos; 
} 

此代码在编辑器或独立版本中运行良好,但当我尝试在我的 iOS 设备上运行它时,我看到一些抖动。该场景有 3 个使用上述脚本的游戏对象,并且没有刚体物理。这只是三个物体在没有任何物理的情况下坠落。

知道为什么会导致抖动吗?

【问题讨论】:

    标签: c# ios unity3d


    【解决方案1】:

    这可能是因为您在Update() 中创建了一个新的var pos

    Update() 每帧调用一次,因此pos 每帧都被创建为一个新变量,从而减慢了计算时间,这就是它抖动的原因。

    Update() 方法之外创建您的var pos,这应该可以解决问题:)

    【讨论】:

    • 看看局部变量和字段的区别。局部变量不会卡住程序(如果您不填充堆栈)。它们在函数结束时使用和删除。所以我认为问题不在于更新中的 var Pos
    • @tom 这是一个很好的观点,但它不应该对这么小的东西产生影响。这绝对是别的东西!
    【解决方案2】:

    尝试使用

    Time.fixedDeltaTime

    而不是

    时间.deltaTime

    就像我在下面的代码 sn-p 中所做的那样。

    public float speed; 
    
    void Update () 
    { 
        var pos = transform.position;
        pos.y += speed * Time.deltaTime;
        transform.position = pos; 
    } 
    

    希望对你有帮助。

    编辑: 如果上述方法不起作用,请尝试将其放入协程中,如下所示:

    IEnumerator Move(){
        while (true) {
            yield return new WaitForSeconds(Time.fixedDeltaTime);
            float step = speed * Time.deltaTime;
            transform.position += Vector3.up*step;
        }
    }
    

    通过

    在Start()中调用上述协程

    StartCoroutine(MoveTo);

    【讨论】:

    • 我已经尝试过使用 FixedDeltaTime 但它没有修复它!
    猜你喜欢
    • 2013-06-16
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    相关资源
    最近更新 更多