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

public class scene1 : MonoBehaviour
{
    public Transform cube;
    public int Run_num;
    // Start is called before the first frame update
    void Start()
    {
        print("游戏物体初始化运行一次");
    }

    // Update is called once per frame
    void Update()
    {
        Debug.Log("每一帧都会运行这个方法");
        //Debug.Log(Time.deltaTime);
        //(修改不方便,Update不符合常理)cube.Translate(Vector3.forward/50f);//forward每次向前移动一米,因为Update方法是每秒运行50帧,所以要forward/50f才能做到每次向前移动1米

        //1.deltaTime方法(【一般用来控制角色、动画的运动】)
        cube.Translate(Vector3.forward * Time.deltaTime * 3);//永远1s运行3米,
        //Time.timeScale = 3f;//1s运行9米,对所有deltaTime的进行加速
        Time.timeScale = 0;//可以用来暂停动画

        //2.realtimeSinceStartup方法(表示自游戏开始后的总时间,即使暂停也会不断的增加。【一般用作性能测试】)
        //加法
        float time1 = Time.realtimeSinceStartup;
        for (var i = 0; i < Run_num; i++) {
            Move1();
        }
        float time2 = Time.realtimeSinceStartup;
        Debug.Log(time2 - time1);

        //乘法
        float time3 = Time.realtimeSinceStartup;
        for (var i = 0; i < Run_num; i++)
        {
            Move2();
        }
        float time4 = Time.realtimeSinceStartup;
        Debug.Log(time4 - time3);
    }
    void Move1() {
        int i = 3;
        i += 9;
        i += 9;
    }
    void Move2()
    {
        int i = 3;
        i *= 9;
        i *= 9;
    }
    private void LateUpdate()
    {
        Debug.Log("每一帧都会运行这个方法,晚于Update的运行顺序");
    }
    private void Awake()
    {
        Debug.Log("都是在游戏物体初始化运行一次,但是Awake的运行顺序高于Start的,并且只要脚本中存在Awake方法,则无论是否挂载了该脚本都会执行该方法");
    }

    private void Reset()
    {
        Debug.Log("游戏物体上按reset时触发");
    }
    //一、事件函数
    //Reset() :被附加脚本时、在游戏物体的组件上按Reset时会触发该事件函数
    //Start() :在游戏初始化时会执行一次
    //Update() :每一帧都会运行这个方法
    //LateUpdate() Update(): 晚于Update的运行顺序,但是FPS和Update是一样的
    //Awake() Start() : 都是在游戏物体初始化运行一次,但是Awake的运行顺序高于Start的,并且只要脚本中存在Awake方法,则无论是否挂载了该脚本都会执行该方法
    //OnEnable(): 当将物体的SetActive设置为true时就会自动调用调用该方法
    //OnDestory(): 当关闭游戏则会调用该方法
    //FixedUpdate(): 会在指定帧调用该方法多少次

    //二、Time时间类函数:
    //Time.time 表示从游戏开发到现在的时间,会随着游戏的暂停而停止计算。
    //Time.timeSinceLevelLoad 表示从当前Scene开始到目前为止的时间,也会随着暂停操作而停止。
    //Time.deltaTime 表示从上一帧到当前帧时间,以秒为单位。【一般用来控制角色、动画的运动】
    //Time.fixedTime 表示以秒计游戏开始的时间,固定时间以定期间隔更新(相当于fixedDeltaTime)直到达到time属性。
    //Time.fixedDeltaTime 表示以秒计间隔,在物理和其他固定帧率进行更新,在Edit->ProjectSettings->Time的Fixed Timestep可以自行设置。
    //Time.SmoothDeltaTime 表示一个平稳的deltaTime,根据前 N帧的时间加权平均的值。
    //Time.timeScale 时间缩放,默认值为1,若设置<1,表示时间减慢,若设置>1,表示时间加快,可以用来加速和减速游戏,回放等、非常有用。如果游戏中控制运动的都是使用了Time.deltatime的话,则可以通过设置Time.timeScale=0来暂停其运动等。
    //Time.frameCount 总帧数
    //Time.realtimeSinceStartup 表示自游戏开始后的总时间,即使暂停也会不断的增加。【一般用作性能测试】
    //Time.captureFramerate 表示设置每秒的帧率,然后不考虑真实时间。
    //Time.unscaledDeltaTime 以秒计算,完成最后一帧的时间 不考虑timescale时候与deltaTime相同,若timescale被设置,则无效。
    //Time.unscaledTime 从游戏开始到现在所用的时间 不考虑timescale时候与time相同,若timescale被设置,则无效。


}