• 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、发生时间、维持时间、衰退时间等,实现自己想要的效果

    参考

  • 相关阅读:
    AtCoder Regular Contest 093
    AtCoder Regular Contest 094
    G. Gangsters in Central City
    HGOI 20190711 题解
    HGOI20190710 题解
    HGOI 20190709 题解
    HGOI 20190708 题解
    HGOI20190707 题解
    HGOI20190706 题解
    HGOI 20190705 题解
  • 原文地址:https://www.cnblogs.com/SouthBegonia/p/11891117.html
Copyright © 2020-2023  润新知