游戏开发小结——实现简单的相机震动
从头开始在Unity中实现简单的相机震动。
如果您正在使用Cinemachine,则可以使用它进行相机震动,但如果没有,您将需要自己实现。
创建基本相机震动效果非常简单:
- 定义震动持续时间
- 选择效果的强度
- 在-1f和1f之间绘制随机坐标,将其放入一个向量中并将其标准化
- 使用这个标准化向量乘以相机的参考位置来调整相机的参考位置
- 对于指定的持续时间,每帧重复随机绘制和位置调整
- 将相机设置回其参考位置

测试我们的相机震动
我们只需要将我们的震动逻辑放在一个协程中。我们还在开始时创建了一个PSNG。代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraShaker : MonoBehaviour
{
public Vector3 mReferencePosition;
public float mShakeStrength;
public float mShakeDuration = 1f;
private System.Random _mRand;
void Start()
{
_mRand = new System.Random();
}
public void Shake() {
mReferencePosition = transform.position;
StartCoroutine(Coroutine_Shake());
}
IEnumerator Coroutine_Shake() {
float elapsed = 0f;
Vector3 displacement = new Vector3();
do {
// 在-1f和1f之间计算浮点随机数
displacement.x = ((float)_mRand.NextDouble()) * 2f - 1f;
displacement.y = ((float)_mRand.NextDouble()) * 2f - 1f;
transform.position = mReferencePosition + displacement * mShakeStrength;
yield return null;
elapsed += Time.deltaTime;
} while (elapsed < mShakeDuration);
transform.position = mReferencePosition;
yield return null;
}
}
有很多方法可以改进这个,比如为震动强度添加平滑效果,我将让您自己对此进行修改以适应您自己的目的。
文章介绍了如何在Unity中从头开始创建基本的相机震动效果,特别是当不使用Cinemachine时。通过定义震动持续时间和强度,生成-1f到1f之间的随机坐标,调整相机位置,并在协程中实现震动逻辑。代码示例展示了如何创建和恢复相机的参考位置。
2368

被折叠的 条评论
为什么被折叠?



