Unity笔记-02
Time
代码:Time.time
项目从开始到现在的运行时间,会受到时间缩放影响,只读
代码:Time.unscaledTime
项目才开始到现在的运行时间,不会受到时间缩放的影响,只读
代码:Time.realtimeSinceStartup
项目从开始到现在的真正的运行时间,排除卡顿影响的时间,不会受到时间缩放的影响,只读
代码:Time.deltaTime
渲染帧的时间,也就是每一帧的时间,不同性能的硬件会对渲染效率造成影响,性能越差,每帧的渲染时间就越长,反之越短。会受到时间缩放的影响,只读
代码:Time.timeScale
设置时间缩放比例,默认为1,如果赋值0,那么时间停止。
Update方法,每渲染帧更新,Update受渲染影响,也就是硬件性能影响,不受时间缩放影响
FixUpdate方法,固定时间执行,与渲染无关,受时间缩放影响
代码块:
public void Update()
{
this.transform.Rotate(0, speed * Time.deltaTime,0);//恒定每秒转速
//个别不受时停影响的设置方法
this.transform.Rotate(0, speed * Time.unscaledDeltaTime,0);
//unscaleDeltaTime表示不受时间缩放影响的渲染帧时间间隔
//旋转速度乘以每帧消耗时间,保证旋转/移动速度不受机器性能以及渲染性能影响
}
由于不同硬件性能不同,渲染帧消耗的时间不同,Update的更新频率也不同,预要实现恒定每秒转速,那么需要设置恒定转速,就需要达到:越短的渲染帧旋转角度越小,越长的渲染帧旋转角度越大,以此达到平衡。并且可以通过设置Time.deltaTime
的值对物体进行时间缩放,比如制作特写镜头或者时间停止。如果需要使得个别物体不受时间停止的影响,那么需要使用Time.unscaledDeltaTime
倒计时功能的实现
代码块-1
private void Timer1()
{
if (Time.time >= nextTime)
{
if (time == 0)
{
nextTime = 0;
}
else
{
text.text = string.Format("{0:d2}:{1:d2}", time / 60, time % 60);
time--;
nextTime++;
}
}
}
预先设置下一次执行的时间,并不断检测每一次的项目运行时间,每次执行后更新下一次执行时间,已达到每秒运行一次的效果,也可以通过设置nextTime的变化已达到每次更新时间都不同的效果,例如缓动
该方法适合立即响应的操作,例如:鼠标按下即可发射子弹,通过时间设置每间隔多少时间发射一颗子弹
代码块-2
private void Timer2()
{
totalTime += Time.deltaTime;
if (totalTime >= 1)
{
time--;
text.text = string.Format("{0:d2}:{1:d2}", time / 60, time % 60);
totalTime = 0;
}
}
每渲染帧更新,不断累加渲染帧的总和,如果达到1那么便执行,执行后重置总和。也可以通过设置nextTime的变化已达到每次更新时间都不同的效果,例如缓动
该方法适合具有延时性的操作,例如:鼠标按下达到目的后但需等待一段时间在执行的行为
代码块-3
InvokeRepeating("方法名", 5, 1);
CancelInvoke("方法名");//停止执行
通过InvokeRepeating()
方法,第一个参数为执行方法的名称,第二个参数为开始执行的时间,第三个参数为执行间隔
该方法较为简单,但是局限性较大,间隔时间固定,无法做到像前两种可以自由控制固定时间的方法,相较于第三种方法,前两种方法较为灵活
代码:Invoke("方法名",开始调用时间)
可以用于设置延时但只调用一次的方法,一般放在Start()
方法里
预制件 :Prefab
一种资源类型,可以作为模版在多个场景里创造实例,如果更改预制件那么实例也会发生改变,其中注意一点:如果对实例的某一属性进行单独改变,那么这个属性栏会被加粗,表示这是这个实例独立的元素,此时如果不使用Apply同步到预制件,即使改变预制件的这一属性,这一实例的这一属性也不再发生变化
Apply:将某一实例的修改同步到预制件
Select:通过预制件实例选择对应的预制件
Revert:放弃实例的属性值,还原为预制件的属性值