源码:
夸克: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脚本,输入以下代码。
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<CinemachineVirtualCamera>();
noiseProfile = virtualCamera.GetCinemachineComponent<CinemachineBasicMultiChannelPerlin>();
}
/// <summary>
/// 震屏
/// </summary>
/// <param name="duration">时长</param>
/// <param name="amplitude">幅度</param>
/// <param name="frequency">频率</param>
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);
}
}
/// <summary>
/// 停止震屏
/// </summary>
private void StopShaking()
{
if (noiseProfile != null)
{
noiseProfile.m_AmplitudeGain = 0f;
noiseProfile.m_FrequencyGain = 0f;
}
}
}
双击打开PlayerController脚本,输入以下代码。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
private VirtualCamera virtualCamera;
void Start()
{
if (virtualCamera == null)
{
virtualCamera = GameObject.Find("Virtual Camera").GetComponent<VirtualCamera>();
}
}
void LateUpdate()
{
if (Input.GetKeyDown(KeyCode.K))
{
CameraShake();
}
}
public void CameraShake()
{
virtualCamera.CameraShake();
}
}
把VirtualCamera脚本挂载到Virtual Camera对象上。

把VirtualCamera脚本挂载到Virtual Camera对象上
把PlayerController脚本挂载到Player对象上。

把PlayerController脚本挂载到Player对象上
选中Virtual Camera对象,把Player对象拖拽到CinemachineVirtualCamera组件下的Follow和Look At中。
修改Noise为Basic Multi Channel Perlin;
修改Noise Profile为6D Shake或6D Wobble(震动效果更明显);
修改Amplitude Gain和Frequency Gain为0(若不为0,则运行后会一直震动)。

设置CinemachineVirtualCamera组件参数
运行项目,在Game窗口按下K键(英文输入法下)触发摄像机震动效果。

运行项目,在Game窗口按下K键(英文输入法下)触发摄像机震动效果
总结:基于Cinemachine的震屏效果,主要是通过CinemachineVirtualCamera组件下的Noise来实现的。原理是对相机添加噪波来控制摄像机抖动。
震屏效果可以显著提升游戏打击感,往往在角色受到重击,或射击游戏开枪时触发。案例中是通过按下K键触发的,实际项目中需修改触发逻辑到相关的方法中。
本案例只是提供一个实现简易震屏效果的方法,要实现更复杂的效果,需要根据实际项目进行修改,推荐参考官方文档,或其他专业文档进行学习。
祝各位开发顺利~