微信号:Unity-GreaterChina

介绍:Unity官方开发者平台,分享最前沿的技术文章和开发经验,精彩的Unity活动和社区相关信息.

在Unity中实现相机抖动特效

2018-08-16 12:18 Unity

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


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


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


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

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)!


推荐阅读


促销活动

8月Asset Store资源商店促销 

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

活动地址:

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



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

 
Unity官方平台 更多文章 摄影制图法工作流程指南(3) 今晚8点直播 | 与Mike大叔和Unity 2D团队聊新功能 详解Animation C# Jobs 揭秘Unity新版本测试 香港的中学生用Unity创作出了怎样的项目
猜您喜欢 苹果发布FaceTime摄像头驱动升级 ❲追根究底❳编程语言的基石——Lambda calculus 9点1氪:传iPhone 7不会采用Smart Connector技术;Lyft携手通用汽车,将测试无人驾电动出租车 头条丨AI 时代微软押注 FPGA,《连线》深度解析 Project Catapult 太疯狂!微软Azure大会上有容云YourunCloud惊艳全场