如何绕过Time.time规模

时间:2015-11-21 22:22:03

标签: unity3d 2d

我的播放器附有一个脚本,其中包含IEnumerator OnTriggerExit2D。其中有一个time.time scale等于0,这使得整个游戏在与标记对象发生碰撞后暂停。我这样设置,以便我的播放器在碰撞后的某个时间停止(我使用yield return new WaitForSeconds)。

我的问题是;有没有办法让我的玩家不受time.time scale影响,但在碰撞发生后仍然停止,所以我的玩家仍然在整个游戏暂停时仍在运行。这是我的剧本:

 public class Player : MonoBehaviour {

    public float speed = 15f;
    private Vector3 target;
    public Player playerMovementRef;
    void Start () {
        target = transform.position;
    }

    void Update () {
        if (Input.GetMouseButtonDown(0)) {
            target = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            target.z = transform.position.z;
        }
        transform.position = Vector3.MoveTowards(transform.position, target, speed * Time.deltaTime);
    }  

    IEnumerator OnTriggerExit2D (Collider2D other){
        if (other.tag == "Bouncy object")
            playerMovementRef.enabled = false;
        yield return new WaitForSeconds (0.35f);
        Time.timeScale = 0f;
        playerMovementRef.enabled = true;
    }
}

1 个答案:

答案 0 :(得分:2)

<强>案例1

您可以从更新中删除Time.deltaTime。 即使将时间刻度设置为0,仍会调用更新。只有Time.deltaTime为0,因此您的播放器不会移动。

您可以放置​​一些常量值,而不是使用Time.deltaTime来移动播放器。 虽然它不会独立于帧率,但你可以让你的玩家移动。

<强>情况2

您可以禁用(GetComponent(。。enabled = false)来自除玩家之外的所有其他游戏对象的所有刚体,而不是将Time.timescale设置为0。