四、协程
1、Coroutines执行
Coroutines
(1)返回值是IEnumerator
(2)返回参数的时候使用yield return null/0;
(3)协程方法的调用StartCoroutine(method())
测试代码:
public GameObject cube;
void Start () {
print("hha");
StartCoroutine(ChangeColor());//协程方法开启后,会继续运行下面的代码,不会等协程方法运行结束才继续执行
print("hahaha");
}
IEnumerator ChangeColor()
{
print("hahaColor");
yield return new WaitForSeconds(3);//等待三秒再继续执行
cube.GetComponent<MeshRenderer>().material.color = Color.blue;
print("hahaColor");
yield return null;
}
2、Coroutines实现颜色动画渐变
测试代码:
void Update() {
if (Input.GetKeyDown(KeyCode.Space))
{
StartCoroutine("Fade");
}
}
IEnumerator Fade()
{
for (; ; )
{
Color color = cube.GetComponent<MeshRenderer>().material.color;
Color newColor = Color.Lerp(color, Color.red, 0.02f);
cube.GetComponent<MeshRenderer>().material.color = newColor;
yield return new WaitForSeconds(0.02f);
if (Mathf.Abs(Color.red.g - newColor.g) <= 0.01f)
{ break; }
}
}
3、Coroutines协程的开启和关闭
(1)StartCouroutine:开启协程
(2)StopCouroutine:关闭协程
(3)StopAllCouroutine:关闭所有协程
测试代码:
private IEnumerator ie;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
//ie = Fade();
//StartCoroutine(ie);
StartCoroutine("Fade");
}
if (Input.GetKeyDown(KeyCode.S))
{
//StopCoroutine(ie);
StopCoroutine("Fade");
}
}
五、鼠标相关事件函数OnMouseXXX
(1)OnMouseDown:鼠标按下时调用。
(2)OnMouseDrag:按下鼠标并且仍然按住鼠标不放。
(3)OnMouseEnter:鼠标移入时。
(4)OnMouseExit:鼠标移出时。
(5)OnMouseOver:鼠标在上面时。
(6)OnMouseUp:释放鼠标按钮时。
(7)OnMouseUpAsButton:鼠标被释放到与它被按下相同时。
六、Mathf
1、Mathf的静态变量
(1)Deg2Rad:角度-弧度转换常数(只读)。
(2)Rad2Deg:弧度-角度转换常数(只读)。
(3)Infinity:正无穷(只读)的表示。
(4)NegativeInfinity:负无穷(只读)的表示。
(5)PI: π 3.14159265358979…值(只读)。
(6)Epsilon:一个很小的浮点值(只读)。
2、Mathf的静态方法
(1)Abs:绝对值。
(2)Ceil:向上取整。(返回大于或等于f的最小整数)返回float类型
(3)CeilToInt:向上取整。Int类型
(4)Clamp:把一个值限定在一个范围之内。(在最小浮点数和最大浮点数之间夹住一个值。)
测试代码:(血量)
private int hp = 100;
void TakeDamage()
{
hp -= 10;
hp = Mathf.Clamp(hp,0, 100);
}
(5)Clamp01:将值夹在0和1之间并返回值。
(6)ClosestPowerOfTwo:返回两个值的最近幂。
(7)DeltaAngle:计算以度为单位的两个给定角度之间的最短差值。
(8)Exp:返回e的指定次方。
(9)Floor:向上取整。(返回小于或等于f的最大整数)返回float类型
(10)FloorToInt:向上取整。返回int类型
(11)Pow(f,p):返回f的p次方。
(12)Sqrt:返回参数的平方根。
(13)Max:最大值。
(14)Min:最小值。
(15)MoveTowards:将一个值移动到目标,移动控制。
(16)Lerp:用t在a和b之间做线性插值。
(17)LerpAngle:与Lerp相同,但是确保当它们环绕360度时内插正确。
测试代码:(差值移动)
public class API10Mathf : MonoBehaviour {
public Transform cube;
public float speed = 3;
void Start()
{
cube.position = new Vector3(0, 0, 0);
}
void Update()
{
float x = cube.position.x;
//float newX = Mathf.Lerp(x, 10, Time.deltaTime*speed);//减速运动
float newX = Mathf.MoveTowards(x, 10, Time.deltaTime*speed);//匀速运动
cube.position = new Vector3(newX, 0, 0);
}
(18)PingPong(float t, float length):ping ping值t,这样它就不会大于长度,也不会小于0。
测试代码:(往返运动,匀速)
cube.position = new Vector3(5+Mathf.PingPong(Time.time*speed, 5), 0, 0);