文章目录
- 实现效果
- 摄像机
- 抖动脚本
- 玩家受伤
- 其他文章
实现效果
首先看一下实现效果。
摄像机
我们要使用屏幕抖动,使用的是CinemachineVirtualCamera这个组件,这个组件需要在包管理器中进行导入。
导入这个组件之后,创建一个Chinemachine-2D Camera,接下来我们修改ChinemachineVirtualCamera的Noise,将其设置为Basic Multi Channel Perlin,然后设置Noise Profile为6D Wobble,6D Wobble表示在摄像机位置和方向上的随机扰动。这种扰动会使摄像机在六个自由度上(三个位置坐标和三个旋转角度)产生随机的摇摆效果。也就是说,通过调整6D wobble的参数,我们可以在实现抖动效果的同时,还可以使摄像机在位置和方向上产生更自然的随机运动。这样可以增强场景的真实感和动态感。
接下来,我们通过调整"6D wobble"的幅度和频率来控制摄像机的抖动效果。较大的幅度和频率值将会产生更明显的随机抖动。具体可以根据你的游戏需求来调整这些参数,以达到目标效果。
然后将Amplitude Gain和Frequency Gain属性设置为0。Amplitude Gain参数表示摄像机震动的幅度增益。该参数控制着摄像机震动的强度。较大的Amplitude Gain值会产生更强烈的震动效果,而较小的值则会减弱震动效果。
抖动脚本
创建一个脚本,命名为FollowCamera,然后修改内容为以下代码,挂载到CM vcam1物体上。
在脚本中,我们通过修改震动强度和频率两个属性来实现振动,同时还设置了一个持续时间,通过在调用该函数传递不同参数,来实现不同的效果。当然我也写了默认值,方便了直接调用。
using UnityEngine;
using Cinemachine;public class FollowCamera : MonoBehaviour
{private CinemachineVirtualCamera virtualCamera;private CinemachineBasicMultiChannelPerlin noiseProfile;private 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 ShakeCamera(float duration=0.25f, float amplitude=2, float frequency = 1){if (noiseProfile != null){noiseProfile.m_AmplitudeGain = amplitude;noiseProfile.m_FrequencyGain = frequency;Invoke(nameof(StopShaking), duration);}}private void StopShaking(){if (noiseProfile != null){noiseProfile.m_AmplitudeGain = 0;noiseProfile.m_FrequencyGain = 0;}}
}
玩家受伤
修改你的玩家受伤部分的函数,使其调用follow Camera的ShakeCamera()方法。
public class Player : Person
{[Header("摄像机")]public FollowCamera followCamera;public override void Start(){if(followCamera == null){followCamera=GameObject.Find("CM vcam1").GetComponent<FollowCamera>();}}public override void BeHit(float damage, Vector3 attacker){base.BeHit(damage, attacker);followCamera.ShakeCamera();}
}
其他文章
Unity实现2D游戏跟随摄像机(平滑移动)
Unity2D实现左右移动的敌人角色
Unity创建一个可移动的2D角色