【问题标题】:How can I bypass Time.time scale如何绕过 Time.time 刻度
【发布时间】:2015-11-21 22:22:02
【问题描述】:

我的播放器附加了一个脚本,其中包含IEnumerator OnTriggerExit2D。在其中有一个等于 0 的 time.time scale ,这会使整个游戏在与标记对象碰撞后暂停。我是这样设置的,这样我的播放器就会在碰撞后的某个时间停止(我使用了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;
    }
}

【问题讨论】:

    标签: unity3d 2d


    【解决方案1】:

    案例1

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

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

    案例2

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      相关资源
      最近更新 更多