using UnityEngine;
using System.Collections;
public class CameraShake : MonoBehaviour {
public bool CancelShake;
public void OnEffect()
{
StartCoroutine(ShakeCamera());
}
/// <summary>
/// 物体震动
/// </summary>
/// <param name="shakeStrength">震动幅度</param>
/// <param name="rate">震动频率</param>
/// <param name="shakeTime">震动时长</param>
/// <param name="hasY">是否震动Y轴</param>
/// <returns></returns>
IEnumerator ShakeCamera(float shakeStrength=0.2f,float rate=14,float shakeTime=0.4f,bool hasY=true)
{
float t = 0;
float speed = 1 / shakeTime;
Vector3 orgPosition = transform.localPosition;
while(t<1&&!CancelShake)
{
t += Time.deltaTime * speed;
transform.position = orgPosition + new Vector3(Mathf.Sin(rate * t),hasY==true?Mathf.Cos(rate * t):0, 0) * Mathf.Lerp(shakeStrength, 0, t);
yield return null;
}
CancelShake = false;
transform.position = orgPosition;
}
}
摄像机震动 脚本
最新推荐文章于 2022-01-19 16:24:25 发布