【Unity】基于Cinemachine的震屏效果(基础向)
月羽衔蝉
编辑于 2024年12月12日 02:22
收录于文集
共2篇

源码:

夸克:https://pan.quark.cn/s/268dc2e372bc

UC:https://drive.uc.cn/s/3fde23464ae04?public=1

百度:https://pan.baidu.com/s/186waYDWxVXxpBKVx-Vv0OA?pwd=vu5c

迅雷:https://pan.xunlei.com/s/VODplqW1IxiRpj9GVm6xjxs3A1?pwd=85ad#

蓝奏云:https://wwul.lanzoue.com/ivquJ1d2ztof

用应对的手机网盘APP收藏资源后再下载,可以更好的支持up主哟,创作不易,感谢支持~

网盘空间快满了,限时分享,建议尽快保存文件,防止资源被删除~

创建好Unity项目后,安装Cinemachine插件。

安装Cinemachine插件

创建虚拟相机Virtual Camera。(确保名字也是这个,如果不是就重命名为Virtual Camera,否则后面代码中会找不到这个对象。除非在代码中也同步修改名字,或通过单例模式查找到这个对象上的组件)

创建虚拟相机Virtual Camera

创建Capsule暂时代替角色,重命名为Player。

创建Capsule暂时代替角色,重命名为Player

创建C#脚本,命名为VirtualCamera。

创建C#脚本,命名为VirtualCamera

同样创建C#脚本,命名为PlayerController。

创建C#脚本,命名为PlayerController

双击打开VirtualCamera脚本,输入以下代码。

代码块
text/x-csharp
自动换行
复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Cinemachine;

public class VirtualCamera : MonoBehaviour
{
    private CinemachineVirtualCamera virtualCamera;
    private CinemachineBasicMultiChannelPerlin noiseProfile;

    void Start()
    {
        virtualCamera = GetComponent();
        noiseProfile = virtualCamera.GetCinemachineComponent();
    }

    /// 
    /// 震屏
    /// 
    /// 时长
    /// 幅度
    /// 频率
    public void CameraShake(float duration = 0.25f, float amplitude = 1f, float frequency = 1f)
    {
        if (noiseProfile != null)
        {
            noiseProfile.m_AmplitudeGain = amplitude;
            noiseProfile.m_FrequencyGain = frequency;
            Invoke(nameof(StopShaking), duration);
        }
    }

    /// 
    /// 停止震屏
    /// 
    private void StopShaking()
    {
        if (noiseProfile != null)
        {
            noiseProfile.m_AmplitudeGain = 0f;
            noiseProfile.m_FrequencyGain = 0f;
        }
    }
}
复制成功