Unity、ゲームをtimescaleで一時停止したり再開したりする際に注意すべきこと

複数のクラスでtimescaleを操作するとお互いに干渉し合ってうまく動作しないので

初めに読み込まれるシーンにTimeScaleControllerクラスを作成してTimeScaleControllerという名前のオブジェクトを作成し、これにさっきのクラスをアタッチしてシーンに配置。

Start()関数にDontDestroyOnLoad(this);関数を書き込みシーン移動後も削除不可能にする。タイムスケールの操作はこのクラスだけでしかしないこと。

こんな感じに

using UnityEngine;
using System.Collections;

public class TimeScaleController : MonoBehaviour {

	// Use this for initialization
	void Start () {
		DontDestroyOnLoad(this);
	}

	// Update is called once per frame
	void Update () {
		LeapDeviceConnectStatus LDCS = GameObject.FindObjectOfType(typeof(LeapDeviceConnectStatus)) as LeapDeviceConnectStatus;
		ContinueWindow CW = GameObject.FindObjectOfType(typeof(ContinueWindow)) as ContinueWindow;
		if(LDCS && (LDCS.showConnectWarning || LDCS.showFocusWarning) ){
			Time.timeScale = 0f;
		}else if(CW && CW.showContinueWindow){
			Time.timeScale = 0f;
		}else{
			Time.timeScale = 1f;
		}
	}
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です