baobao
12/18/2017 - 12:06 PM

Unityの更新タイミング検証コード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class TestUpdate : MonoBehaviour
{
    public Text text;
    // Use this for initialization
    void Start()
    {
		
    }
	
    // Update is called once per frame
    void Update()
    {
        /*
        フレーム間で保存されるスクリーンショットを許可するためゲームの再生時間が遅くなります。
        このプロパティーが 0 以外の値ならフレームの更新がリアルタイムでフレームのレンダリングに必要な時間に関係ないインターバル 
        (1.0/captureFramerate) で発生します。これは一定のフレームレートが必要で、
        スクリーン画像を保存するためにフレーム間で十分な時間を残してムービーをキャプチャーしたい場合に便利です。

        getter / setter
        
        */
//        Time.captureFramerate;

        /*
         * 最後のフレームを完了するのに要した時間(秒)(Read Only)
         */ 
//        Time.deltaTime;

        /*
         * Physics や (MonoBehaviour の FixedUpdate のような) 
         * 他の固定フレームレートの更新を実行するインターバル(秒)
         */ 
//        Time.fixedDeltaTime;

        /**
         * 最新の FixedUpdate を開始した時間 (Read Only) 。これはゲーム開始からの時間(秒)です。
         */ 
//        Time.fixedTime;


//        Time.fixedUnscaledDeltaTime;
//        Time.fixedUnscaledTime;
//        Time.frameCount;
//        Time.inFixedTimeStep;

        /**
         * フレームがとれる最大時間。( MonoBehaviour の FixedUpdate のように)
         * Physics やその他固定フレームレートを更新します。
         */ 
//        Time.maximumDeltaTime;
//        Time.maximumParticleDeltaTime;

        /**
         * ゲーム開始からのリアルタイム(秒)(Read Only) 
         */ 
//        Time.realtimeSinceStartup;
//        Time.renderedFrameCount;
//        Time.smoothDeltaTime;

        /**
         * このフレームの開始する時間(Read Only)。ゲーム開始からの時間(秒)です。
         */ 
//        Time.time;

        /**
         * 時間の経過をスケールします。これはスローモーション効果で使用できます。
         */ 
//        Time.timeScale;

        /**
         * フレームが開始された時間 (Read Only) 。最後のレベルが読み込まれてからの時間 (秒) です。
         */ 
//        Time.timeSinceLevelLoad;

        /**
         * 最後のフレームを完了した timeScale に依存しない時間(秒) (Read Only)
         */ 
//        Time.unscaledDeltaTime;

        /**
         * このフレームの始まる timeScale に依存しない時間 (Read Only)。
         * これはゲーム開始からの時間(秒)です。
         */ 
//        Time.unscaledTime;

        text.text = string.Format(@"
deltaTime : {0}秒
fixedDeltaTime : {1}秒        
",
            Time.deltaTime,
            Time.fixedDeltaTime
        );
    }

    int[] frameRateArray = new int[]{ 60, 30, 15, 10, 5, 2, 1 };
    float[] timeScaleArray = new float[]{ 1f, 0.8f, 0.5f, 0.2f, 0.1f, 0 };

    void OnGUI()
    {
        GUILayout.BeginHorizontal();
        GUILayout.BeginVertical();
        foreach (var f in frameRateArray)
        {
            if (GUILayout.Button(f.ToString(), 
                    GUILayout.Width(50f), 
                    GUILayout.Height(50f)))
            {
                Application.targetFrameRate = f;
            }
        }
        GUILayout.EndVertical();
        GUILayout.BeginVertical();
        foreach (var f in timeScaleArray)
        {
            if (GUILayout.Button(f.ToString(), 
                    GUILayout.Width(50f), 
                    GUILayout.Height(50f)))
            {
                Time.timeScale = f;
            }
        }
        GUILayout.EndVertical();
        GUILayout.EndHorizontal();
    }
}