我的播放器附有一个脚本,其中包含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;
}
}
答案 0 :(得分:2)
<强>案例1 强>
您可以从更新中删除Time.deltaTime。 即使将时间刻度设置为0,仍会调用更新。只有Time.deltaTime为0,因此您的播放器不会移动。
您可以放置一些常量值,而不是使用Time.deltaTime来移动播放器。 虽然它不会独立于帧率,但你可以让你的玩家移动。
<强>情况2 强>
您可以禁用(GetComponent(。。enabled = false)来自除玩家之外的所有其他游戏对象的所有刚体,而不是将Time.timescale设置为0。