游戏开发小结——实现简单的相机震动

文章介绍了如何在Unity中从头开始创建基本的相机震动效果,特别是当不使用Cinemachine时。通过定义震动持续时间和强度,生成-1f到1f之间的随机坐标,调整相机位置,并在协程中实现震动逻辑。代码示例展示了如何创建和恢复相机的参考位置。

游戏开发小结——实现简单的相机震动

从头开始在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;
    }
}

有很多方法可以改进这个,比如为震动强度添加平滑效果,我将让您自己对此进行修改以适应您自己的目的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小云同志你好

谁能书阁下,白首太玄经

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值