Time.timeScaleでFixedUpdate()の時間間隔を調整できる。
Time.timeScale=1.0 で、デフォルトの速度(時間間隔)
Time.timeScale=0.5で、速度を半分(時間間隔を2倍)にする
Time.timeScale=0.0は、速度ゼロ、すなわち、FixedUpdate()を停止する
具体的な事例で見てみる。
子オブジェクトのスクリプト。一定速度で回転する。
using UnityEngine; using System.Collections; public class revolution : MonoBehaviour { // Update is called once per frame void FixedUpdate () { transform.RotateAround(Vector3.up, 0.02f); } }
親オブジェクト:一定速度で上昇するスクリプト。スペースキーでTime.timeScale=0.0f/1.0fにトグルする。これによって、アニメーションの停止・作動を切り替える。
using UnityEngine; using System.Collections; public class move : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (Input.GetKeyDown ("space")){ print ("space key was pressed Time.timeScale="+Time.timeScale); Time.timeScale = Mathf.Abs (1.0f-Time.timeScale); } } void FixedUpdate(){ transform.Translate(0.01f*Vector3.up); } }
ここで注意するのは次の2点。
1)timeScale=0.0fで停止するのは、FixedUpdate()のみ。Update()はTime.timeScaleの値に関係なく、動き続ける。
つまり、上の事例では、親オブジェクトのUpdate()内のInput.GetKeyDownによるキー入力は有効のままである。
2)親オブジェクトでTime.timeScale=0.0fとすると、子オブジェクトを含む全てのFixedUpdate()が停止する。上の例では、親オブジェクトの上昇が止まるだけでなく、子オブジェクトの回転も止まる。
親子関係にあるオブジェクトだけではなく、シーン内のすべてのオブジェクトでFixedUpdate()は停止する。