• Unity


    普通相机抖动脚本较易实现,但在使用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、发生时间、维持时间、衰退时间等,实现自己想要的效果

    参考

  • 相关阅读:
    给年轻人的最好忠告--读书笔记
    设计模式之原型模式(Prototype)
    设计模式之建造者模式(Builder)
    简单工厂模式
    Java并发编程:volatile关键字解析
    深入Java单例模式
    单例模式
    收音代码分析
    蓝牙核心技术概述(一):蓝牙概述
    UART接口
  • 原文地址:https://www.cnblogs.com/SouthBegonia/p/11891117.html
Copyright © 2020-2023  润新知