普通相机抖动脚本较易实现,但在使用cinemachine相机下,其Transform组件不可被代码改变,那么Cinemachine的相机抖动如何实现呢?本文结合实际项目,对实现相机抖动的三大步骤进行系统讲解:html
项目背景:一款2D像素动做游戏,咱们操控着Player(必须带有Collider组件),游戏相机为Cinemachine 2DCamera(关于其配置方法此处不作赘述,推荐文章在末尾参考处)git
在咱们使用的虚拟相机 CM vcam1 上添加组件:AddComponent->CinemachineImpulse Listenergithub
震动信号发生物体(调用震动函数的物体)为Player,所以须要在Player上添加组件:AddComponent->Cinemachine Collision Impulse Source(注:必须挂到含Collider的物体上),而后在Raw Signal右侧齿轮->New Noise Settings 添加震动配置器,默认名CM vcam1 Raw Signalide
在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()
方法,还有两个带参的方法:.net
//倘若使用传递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中实现相机抖动的基本流程:code
本例仅介绍了单Position方向上的抖动,读者可按需配置抖动的Position、Rotation、发生时间、维持时间、衰退时间等,实现本身想要的效果orm