赞
踩
RPG或者动作游戏最重要的就是打击感,好的打击效果可以给游戏增色不少,而一种最方便最简单的提升打击感的效果就是震屏效果,短短几十行代码就可以让我们的游戏效果提升不少。
那么在我们进行游戏战斗场景开发时,常常为了加强临场感,会在有爆炸或者撞击的时候加入震屏的效果,原理其实很简单,就是对场景主相机进行坐标和角度的变化。
话不多说,看一下代码:
// 相机震动效果 using UnityEngine; public class CameraShakeEffect : MonoBehaviour { /// <summary> /// 相机震动方向 /// </summary> public Vector3 shakeDir = Vector3.one; /// <summary> /// 相机震动时间 /// </summary> public float shakeTime = 1.0f; private float currentTime = 0.0f; private float totalTime = 0.0f; public void Trigger() { totalTime = shakeTime; currentTime = shakeTime; } public void Stop() { currentTime = 0.0f; totalTime = 0.0f; } public void UpdateShake() { if (currentTime > 0.0f && totalTime > 0.0f) { float percent = currentTime / totalTime; Vector3 shakePos = Vector3.zero; shakePos.x = UnityEngine.Random.Range(-Mathf.Abs(shakeDir.x) * percent, Mathf.Abs(shakeDir.x) * percent); shakePos.y = UnityEngine.Random.Range(-Mathf.Abs(shakeDir.y) * percent, Mathf.Abs(shakeDir.y) * percent); shakePos.z = UnityEngine.Random.Range(-Mathf.Abs(shakeDir.z) * percent, Mathf.Abs(shakeDir.z) * percent); Camera.main.transform.position += shakePos; currentTime -= Time.deltaTime; } else { currentTime = 0.0f; totalTime = 0.0f; } } void LateUpdate() { UpdateShake(); } void OnEnable() { Trigger(); } }
接下来咱们看一下设计思路:
1.创建类,带参数构造方法:
2.获得相机的起始位置,方便震动结束之后恢复相机状态:
3.相机震动操作:
这里我直接通过while循环来实现了,当然在MonoBehavior中也可以在Update方法中实现这样的操作,这里为了封装,所以抽离了一些MonoBehavior的特性。
4.震动结束后恢复相机参数:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。