实现相机振动的代码如下:
using UnityEngine;
using System.Collections;
public class CameraShake : MonoBehaviour {
Matrix4x4 originalProjection;
float timer;
void Start()
{
originalProjection = camera.projectionMatrix;
}
public IEnumerator Shake(float gap)
{
timer = Time.time;
while (Time.time - timer <= gap)
{
Matrix4x4 p = originalProjection;
p.m01 += Mathf.Sin(Time.time * 120F) * 0.04F;
p.m10 += Mathf.Sin(Time.time * 150F) * 0.04F;
camera.projectionMatrix = p;
yield return 0;
}
camera.ResetProjectionMatrix();
}
}
把该脚本绑定在相机后,通过一个事件调用CameraShake的Shake函数,如:
void OnTriggerEnter(Collider other)
{
if (other.name == "Cube")
{
StartCoroutine(Camera.main.GetComponent<CameraShake>().Shake(speed));
}
}