这期笔记我们专注Unity提供的各种数学相关的类来学习。
API文档地址:http://docs.unity3d.com/ScriptReference/Time.html
Demo04是一个自由落体的弹性小球从天空落下的一个场景,用于测试下面的示例所用。
这个效果在游戏中也比较常用,比如在战斗游戏中,打败BOSS或我方死亡时都会呈现一种慢镜头的效果。
我们的脚本按下空格将会减速10倍的时间,脚本绑定在摄像机上,代码如下:
1 using UnityEngine; 2 using System.Collections; 3 4 public class Demo04Script : MonoBehaviour 5 { 6 void Start() 7 { 8 } 9 10 void Update() 11 { 12 if (Input.GetKeyDown(KeyCode.A)) 13 { 14 Time.timeScale = 0.1f; 15 Time.fixedDeltaTime = 0.002f; 16 } 17 if (Input.GetKeyUp(KeyCode.A)) 18 { 19 Time.timeScale = 1.0f; 20 Time.fixedDeltaTime = 0.02f; 21 } 22 } 23 }
需要注意的是除了修改timeScale之外,还要修改物理运算的fixedDeltaTime,否则在物理模拟中会由于间隔过小导致出现跳帧的现象,大家可以注释掉fixedDeltaTime的代码运行查看。
API文档地址:http://docs.unity3d.com/ScriptReference/Random.html
随机数比较简单,就不过多讲解了。
API文档地址:http://docs.unity3d.com/ScriptReference/Mathf.html
Demo05是一个随机变换颜色的小盒子,用于测试下面的示例所用。
主要使用到了柏林噪音,具体的代码如下:
1 using UnityEngine; 2 using System.Collections; 3 4 public class Demo05Script : MonoBehaviour 5 { 6 public GameObject cube; 7 8 private Material _material; 9 private Vector3 _colorSpace; 10 11 void Start() 12 { 13 _material = cube.GetComponent<Renderer>().material; 14 15 _colorSpace = new Vector3( 16 Random.Range(0f, 10f), 17 Random.Range(0f, 10f), 18 Random.Range(0f, 10f) 19 ); 20 } 21 22 void Update() 23 { 24 float r = Mathf.PerlinNoise(Time.time, _colorSpace.x); 25 float g = Mathf.PerlinNoise(Time.time, _colorSpace.y); 26 float b = Mathf.PerlinNoise(Time.time, _colorSpace.z); 27 28 _material.color = new Color(r, g, b); 29 } 30 }
由于柏林噪音是一种平滑的随机形式,所以我们的颜色改变也是平滑过渡的,如果使用普通的随机数则达不到平滑过渡的效果。