你是否想要为游戏加入更强的真实感?你是否想要为游戏添加一些屏幕抖动特效?

为游戏加入真实感最好的一个方法就是使用相机抖动特效。这个方法非常适用于突显动作效果,使相机的感觉更为真实,并让你感觉自己成为了游戏的一部分。本篇文章将帮助你了解通过三种方法创建相机抖动特效。

打开网易新闻 查看更多图片

实现相机抖动特效的三种方法

本文提供完整的工程示例下载,请访问:

http://github.com/tejas123/different-ways-of-shaking-camera-In-unity/archive/master.zip

1

通过脚本

首先在Unity设置如下图的场景。

打开网易新闻 查看更多图片

创建一个名为Explodestar的空白游戏对象,在其子对象部分创建粒子系统,让其实现更明显的效果。创建名为Explodestar的脚本,附加到Explodestar游戏对象上,这样能在游戏运行时播放粒子系统。

创建另一个名为CameraShake的脚本,将其附加到将要加入抖动特效的摄像机上。CameraShake.cs代码如下所示。

using UnityEngine;

using System.Collections;

public class CameraShake : MonoBehaviour

{

public IEnumerator Shake(float duration, float magnitude)

{

Vector3 orignalPosition = transform.position;

float elapsed = 0f;

while (elapsed < duration)

{

float x = Random.Range(-1f, 1f) * magnitude;

float y = Random.Range(-1f, 1f) * magnitude;

transform.position = new Vector3(x, y, -10f);

elapsed += Time.deltaTime;

yield return 0;

}

transform.position = orignalPosition;

}

}

CameraShake脚本中,协程将用于实现相机抖动效果。

ExplodeStar.cs脚本代码如下所示。

using UnityEngine;

using System.Collections;

public class ExplodeStar : MonoBehaviour

{

public ParticleSystem explodePartical;

public CameraShake cameraShake;

void Update()

{

if (Input.GetKeyDown(KeyCode.E))

{

explodePartical.Play();

StartCoroutine(cameraShake.Shake(0.15f, 0.4f));

}

}

}

现在返回到Unity中,点击Play按钮,然后按下E键。屏幕就开始抖动了。这是一个实现抖动相机非常简单快捷的方法。

但是该方法不会以任何方式旋转摄像机,而且也无法控制粗糙度。该方法只会在每帧移动摄像机,而且使用协程有时会略显笨重。如果你想要更平滑的相机抖动特效,不推荐使用该方法。

2

使用动画

首先在Unity设置如下图的场景。

打开网易新闻 查看更多图片

为主摄像机添加Animator,在该Animator中创建二个动画,分别是闲置动画和抖动动画。

在闲置动画中,开始进行录制,并设置摄像机到其原始位置。在抖动动画中,每二帧移动摄像机位置,实现抖动效果。

现在进入Animator中创建抖动特效触发器。在闲置和抖动动画之间创建过渡效果,取消勾选‘has exit time’,设置过渡时间为1。

打开网易新闻 查看更多图片

然后制作抖动动画到闲置动画的过渡,设置过渡时间为1,但是不要取消勾选‘has exit time’。

打开网易新闻 查看更多图片

创建名为ShakeWithAnimation的空对象,添加ShakeWithAnimation脚本到该对象上,在子对象部分使用粒子系统,使效果更明显。

ShakeWithAnimation代码如下所示。

using UnityEngine;

using System.Collections;

public class ShakeWithAnim : MonoBehaviour

{

public Animator camAnim;

public ParticleSystem explodeStar;

void Update()

{

if (Input.GetKeyDown(KeyCode.A))

{

camAnim.SetTrigger("Shake");

explodeStar.Play();

}

}

}

现在返回到Unity中,点击Play按钮,然后按下A键。屏幕又开始了晃动,这是抖动相机的另一种方法。

虽然所有条件都满足了,但是粗糙度怎么办?有没有什么方法可以使用动画来控制粗糙度吗?答案是否定的。那么我们该怎么解决这个问题呢?让我们尝试通过插件来解决这个问题。

3

使用插件

EZ Camera Shake是在Asset Store资源商店广受好评的五星资源,它可以实现相机抖动功能,用来创造许多效果,例如地震爆炸所带来的抖动。

首先访问Asset Store资源商店,下载EZ Camera Shake插件,下载地址:

https://www.assetstore.unity3d.com/cn/?stay#!/content/33148

打开网易新闻 查看更多图片

在EZ Camera Shake下载完成后,将其导入到Unity新建场景中。场景将新增EZCameraShake文件夹。添加EZCameraShake的CameraShaker脚本到主摄像机上,根据需要设置变量。

现在创建空白对象,命名为ExplodeHeart,在子对象部分加入粒子系统,让效果更明显。创建并加入ExplodeHeart脚本到该粒子系统上。为脚本添加EZCameraShake命名空间。

ExplodeHeart脚本代码如下所示:

using UnityEngine;

using System.Collections;

using EZCameraShake;

public class ExplodeHeart : MonoBehaviour

{

public ParticleSystem explodePartical;

void Update()

{

if (Input.GetKeyDown(KeyCode.H))

{

explodePartical.Play();

CameraShaker.Instance.ShakeOnce(4f, 4f, 0.15f, 1f);

}

}

}

现在进入Unity中播放场景,按下H键。屏幕抖动效果会比之前二种方法更平滑。这样就通过使用插件来实现了相机抖动效果。

这样是否意味着通过脚本和动画来抖动相机就不好呢?当然不是这样,最后一种方法会在运行时给内存增加更多负担,如果你不需要这么平滑且控制好粗糙度的的抖动效果,那么使用简单快捷的脚本方法就够了。所以必须按照要求,聪明地选择游戏中要使用的相机抖动方法。

小结

三种实现相机抖动特效的方法你掌握了吗?一定要针对项目中的实际情况选择合适的方法。更多Unity的技术教程尽在Unity官方中文论坛(UnityChina.cn)!

推荐阅读

  • 使用Unity创作《塞尔达传说:旷野之息》风格的视觉特效

  • 社区交流|Unity小技巧分享

  • 在Unity中创建风格化视觉特效

  • 利用ShaderGraph着色器视图实现炫酷的物体消融特效

  • Unity脚本特效插件,让你的天空与众不同

  • Unity粒子系统插件,酷炫特效唾手可得

促销活动

8月Asset Store资源商店促销

8月期间,只需在Asset Store资源商店消费满50-255美元,即可获赠2-6款精品资源,最高消费250美元,更可附赠获得一件Asset Store定制款T恤!

活动地址:

https://assetstore.unity.com/g/august-promo-activation-demo

打开网易新闻 查看更多图片

点击“阅读原文”访问Unity官方技术论坛