普通相机抖动脚本较易实现,但在使用cinemachine相机下,其Transform组件不可被代码修改,那么Cinemachine的相机抖动如何实现呢?本文结合实际项目,对实现相机抖动的三大步骤进行系统讲解:

配置流程

项目背景:一款2D像素动作游戏,我们操控着Player(必须带有Collider组件),游戏相机为Cinemachine 2DCamera(关于其配置方法此处不做赘述,推荐文章在末尾参考处)

在相机上添加监听脚本

在我们使用的虚拟相机 CM vcam1 上添加组件:AddComponent->CinemachineImpulse Listener

  • CinemachineImpulse Listener监听脚本内震动信号(方法调用),使得抖动在此相机上发生

    • Channel Mask:通道遮罩,此处最好默认为EveryThing
    • Gain:可获得震动信号的数目,0为屏蔽,1表示某时段仅能进行一个抖动运动
    • Use 2D Distance:用于2D游戏,忽略相机Z轴的抖动

在震动信号发生物体上添加脚本

震动信号发生物体(调用震动函数的物体)为Player,因此需要在Player上添加组件:AddComponent->Cinemachine Collision Impulse Source(注:必须挂到含Collider的物体上),然后在Raw Signal右侧齿轮->New Noise Settings 添加震动配置器,默认名CM vcam1 Raw Signal

  • Cinemachine Collision Impulse Source:含有抖动函数震动配置器的关键脚本

    • Raw Signal:震动配置器,配置震动参数的关键部件,我们打开刚上面新建的CM vcam1 Raw Signal,可看到震动方式的各类参数。我们以Position Y,即上下抖动为例,添加Components后可设置其Frequency震频Amplitude震幅,并且勾选右侧方框可将其设置为正弦波
    • Attack:抖动开始的变化曲线及时间
    • Sustain Time:抖动的持续时间
    • Decay:抖动衰退的变化曲线及时间

调用震动方法:

在Player内引用震动核心脚本,并在合适位置调用震动方法

private Cinemachine.CinemachineCollisionImpulseSource MyInpulse;

private void Start()
{
MyInpulse = GetComponent<Cinemachine.CinemachineCollisionImpulseSource>();
} private void Update()
{
//按下右键产生相机抖动,抖动方式依照上面CM vcam1 Raw Signal内配置信息
if (Input.GetMouseButtonDown(1))
MyInpulse.GenerateImpulse();
}

至此,我们在游戏内操控Player,按下右键即可实现相机抖动。当然除了上面无参的GenerateImpulse()方法,还有两个带参的方法:

//假若使用传递velocity的方法,其震动方式为velocity和CM vcam1 Raw Signal的混合
public void GenerateImpulse(Vector3 velocity);
public void GenerateImpulse(Vector3 position, Vector3 velocity);

此外,还有可能出现bug:还尚未调用震动函数,游戏开始时就自动产生抖动。其产生原因博主尚未在对应脚本内发现,但解决方式为关闭Player上的Cinemachine Collision Impulse Source脚本

总述

Cinemachine中实现相机抖动的基本流程:

  • 在虚拟相机上添加监听脚本 CinemachineImpulse Listener
  • 在Player上添加震动核心脚本Cinemachine Collision Impulse Source,并添加、设置震动配置器
  • Player脚本合适位置调用震动函数

本例仅介绍了单Position方向上的抖动,读者可按需配置抖动的Position、Rotation、发生时间、维持时间、衰退时间等,实现自己想要的效果

参考

Unity - Cinemachine实现相机抖动的更多相关文章

  1. (转)Unity Cinemachine插件,实现单目标和多目标之间切换

    Unity Cinemachine插件学习笔记,实现单目标和多目标之间切换*版本要求Unity2017.1及以上. 参考资料: [官方] Unity 2017.1正式版发布 Cinemachine插件 ...

  2. Unity2019.3缺少Cinemachine插件/AssetStore搜索不到

    Unity2019.1版本都还自带Cinemachine,到2019.3就没有了(原因暂时未知),PackageManager里没有,到资源商店里搜索也找不到 解决方法: Windows>Pac ...

  3. Cheatsheet: 2018 05.01 ~ 07.31

    JAVA Java Tips: Creating a Monitoring-Friendly ExecutorService Other Modeling the Card Game War in C ...

  4. Unity User Group深圳站——Timeline & Cinemachine分享

    报名说明:UUG深圳站,2月分享活动正式启动,1月29日中午12:00前报名可获赠Unity精美纪念礼物一份~ 关于Unity Unity 是一款多平台的综合型游戏开发工具,它的出现对蓬勃发展的全球游 ...

  5. Unity 利用Cinemachine快速创建灵活的相机系统

    在第一或第三人称ACT和FPS游戏中,相机的运动需求是多种多样的,Unity内置的Cinemachine包可以助你快速实现不同相机功能,例如范围追踪,边界设置等. 例如,考虑这样一个功能,这在很多游戏 ...

  6. Unity 基于Cinemachine计算透视摄像机在地图中的移动范围

    Unity中Cinemachine的基础功能介绍可详见之前写的博客: https://www.cnblogs.com/koshio0219/p/11820654.html 本篇的重点是讨论,在给定规则 ...

  7. cinemachine unity

    scrips extending timeline Extending Timeline with your own playables Data   Audio   ----playable beh ...

  8. [翻译]:Cinemachine 官方文档(0)

    目录 Overview : Installation and Getting Started :安装并开始 User Guide :用户指南 What is Cinemachine? : 什么是Cin ...

  9. Community Stories: Cinemachine and Timeline——Community Stories: Cinemachine and Timeline

    Community Stories: Cinemachine and Timeline 社区故事:Cinemachine 和 Timeline Adam Myhill, 八月 25, 2017 原文: ...

随机推荐

  1. Eclipse 创建 Maven 项目

    本人也是新手小白,在创建 Maven 项目的时候几乎踩完了所有的坑.特此总结如下: 1.咱先选中 File -> New -> Maven Project 2.然后如下图    在这里说明 ...

  2. 数据挖掘:关联规则的apriori算法在weka的源码分析

    相对于机器学习,关联规则的apriori算法更偏向于数据挖掘. 1) 测试文档中调用weka的关联规则apriori算法,如下 try { File file = new File("F:\ ...

  3. 程序猿的产品思考:2C与2B产品思维的区别

    原创/朱季谦   我最早接触到互联网产品的时候,听到最多的,是做产品要有用户思维,即站在用户角度去看待产品.这个先入为主的概念,在很长一段时间里,都被我效作经典.然而也在很长一段时间里,我竟混淆了其中 ...

  4. Linux本地内核提权漏洞复现(CVE-2019-13272)

    Linux本地内核提权漏洞复现(CVE-2019-13272) 一.漏洞描述 当调用PTRACE_TRACEME时,ptrace_link函数将获得对父进程凭据的RCU引用,然后将该指针指向get_c ...

  5. centos 7.6修改ssh端口,设置防火墙规则

    一.修改ssh端口 1 使用 root 用户进入 /etc/ssh目录 2 备份ssh配置文件 cp sshd_config sshd_config-bak 3 使用 vim 打开 sshd_conf ...

  6. .NET Framework概述

    1.NET Framework是为其运行的应用程序提供各种服务的托管执行环境,它包括两个主要组件:(1).公共语言运行时 (CLR),(2)..NET Framework 类库: 2.NET Fram ...

  7. Redis(八)理解内存

    Redis所有的数据都存在内存中,当前内存虽然越来越便宜,但跟廉价的硬盘相比成本还是比较昂贵,因此如何高效利用Redis内存变得非常重要. 高效利用Redis内存首先需要理解Redis内存消耗在哪里, ...

  8. Java多线程编程(六)单例模式与多线程

    在使用多线程技术的单例模式时会出现一些意想不到的情况,这样的代码如果在生产环境中出现异常,有可能造成灾难性的后果. 一.立即加载/“饿汉模式” 立即加载就是使用类的时候已经将对象创建完毕,常见的实现方 ...

  9. django-Views之常见的几种错误视图代码(三)

    1.404 page not found(找不到对应的页面) 2.500 server error(服务器错误) 3.400 bad request(无效的请求) 4.403 HTTP forbidd ...

  10. laravel6.0控制器-资源控制器

    控制器:控制器用来处理业务的,不应该处理逻辑,如果是小项目可以把逻辑写到控制器里,大点的项目应该抽离出来业务处理层如下:services业务处理层:比如:获取值,验证值,异常捕获命名规则:控制器名:用 ...