当对象建立并以.exe格式运行时,对象在unity2d游戏中的移动速度非常快

时间:2019-02-11 00:47:44

标签: c# unity3d

在游戏中,我有一个精灵在Transform s两点之间移动。

在编辑器中时,子画面会以恒定且缓慢的速度正常在点之间移动。

但是,当我将游戏构建到.exe文件中并运行该文件时,子画面会在两点之间快速移动。

以下是Sprite控制器的相关代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class MonsterController : MonoBehaviour
{
    public Transform pointOne;
    public Transform pointTwo;
    public float speed;
    private bool pointA;
    private bool goingRight;
    private Animator anim;
    public string animLeft;
    public string animRight;

    void Start()
    {
        pointA = true;
        anim = GetComponent<Animator>();
    }

    void Update()
    {
        if (pointA)
        {
            if (transform.position == pointOne.transform.position)
            {
                pointA = false;
            }
            transform.position = Vector2.MoveTowards(transform.position, pointOne.position, speed * Time.fixedDeltaTime;);
            goingRight = true;
        }
        else
        {
            if (transform.position == pointTwo.transform.position)
            {
                pointA = true;
            }
            transform.position = Vector2.MoveTowards(transform.position, pointTwo.position, speed * Time.fixedDeltaTime);
            goingRight = false;
        }

        if (goingRight)
        {
            anim.Play(animRight);
        }
        else
        {
            anim.Play(animLeft);
        }
    }
}

很明显,如果精灵到达该点,则它将使用Vector2.MoveTowards()移动到另一个点。任何建议和帮助都将不胜感激。

1 个答案:

答案 0 :(得分:3)

就像评论中提到的,您应该使用

FixedUpdateTime.deltaTime


  • Update被称为每一帧

  • FixedUpdate以定义的实时间隔(默认情况下通常为0.02 seconds)被调用

相应的Time值是

  • Time.deltaTime:自上次渲染帧以来经过的实时时间

  • Time.fixedDeltaTime:物理方法和例如FixedUpdate被调用(默认为每秒0.02 seconds50次)

因此,只要您的应用以帧速率> 50运行,您从Time.fixedDeltaTime(= 0.02)得到的值就比Time.deltaTime得到的值大(例如60 fps { {1}})


因此,如果帧速率非常快,则在= 0.017方法中使用Time.fixedDeltaTime可能会导致比预期值更大的值/运动。在编辑器中,帧速率比在构建中要慢,因为在构建应用中,您可以摆脱所有UnityEditor开销。


因此应该这样做(也可以使用内联?-operator来简化Update的使用,以提高可读性)

if-else