赞
踩
制作100个unity游戏之26】unity2d横版卷轴动作类游戏1
制作100个unity游戏之26】unity2d横版卷轴动作类游戏2
制作100个unity游戏之26】unity2d横版卷轴动作类游戏3
制作100个unity游戏之26】unity2d横版卷轴动作类游戏4
制作100个unity游戏之26】unity2d横版卷轴动作类游戏5
制作100个unity游戏之26】unity2d横版卷轴动作类游戏6
制作100个unity游戏之26】unity2d横版卷轴动作类游戏7
制作100个unity游戏之26】unity2d横版卷轴动作类游戏8
制作100个unity游戏之26】unity2d横版卷轴动作类游戏9
制作100个unity游戏之26】unity2d横版卷轴动作类游戏10
制作100个unity游戏之26】unity2d横版卷轴动作类游戏11
制作100个unity游戏之26】unity2d横版卷轴动作类游戏12
制作100个unity游戏之26】unity2d横版卷轴动作类游戏13(完结 )
欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第26篇中,我们将探索如何用unity制作一个unity2d横版卷轴动作类游戏,我会附带项目源码,以便你更好理解它。
本节主要是实现相机跟随和区域限制,相机震动反馈
不懂的可以查看我这篇文章:
【推荐100个unity插件之10】Unity最全的最详细的Cinemachine(虚拟相机系统)介绍,详细案例讲解,快速上手
【Unity小技巧】如何在 Unity中使用我们的Cinemachine虚拟相机跟踪多个目标
新增2d虚拟相机
可以添加pixel perfect.相机,他能帮助,在我们的像素旋转或产生畸变的时候,不会出现像素扭曲,保持我们的单位像素
区域限制
配置区域大小
效果
如果你的相机在跟随时出现画面有点抖动的问题,可以选择修改相机的更新方法为FixedUpdate试试
因为后面会涉及场景转换,所以我们希望可以自动去配置区域限制,而不是手动
新增CameraControl代码,记得要调用InvalidateCache,清一下缓存
public class CameraControl : MonoBehaviour { // 引用CinemachineConfiner2D组件 private CinemachineConfiner2D confiner2D; // 在Awake方法中获取CinemachineConfiner2D组件 private void Awake() { confiner2D = GetComponent<CinemachineConfiner2D>(); // TODO: 场景切换后需要更改 } // 在Start方法中调用获取新的相机边界方法 private void Start() { GetNewCameraBounds(); } // 获取新的相机边界方法 private void GetNewCameraBounds() { // 查找具有"Bounds"标签的游戏对象 var obj = GameObject.FindGameObjectWithTag("Bounds"); if (obj == null) return; // 获取游戏对象上的Collider2D组件,并赋值给CinemachineConfiner2D confiner2D.m_BoundingShape2D = obj.GetComponent<Collider2D>(); confiner2D.InvalidateCache(); // 使缓存无效 } }
运行前先删除区域显示,记得配置区域限制tag为Bounds
运行就自动挂载了,和前面效果一样
相机震动可以查看我之前的文章:
unity实现简单的摄像机震动效果(包括普通摄像机和虚拟摄像机)
【Unity小技巧】可靠的相机抖动及如何同时处理多个震动
震动监听,勾选使用2d
新增震动源,注意只有在运行模式下才可以测试
新增VoidEventSO,定义震动事件ScriptableObject
[CreateAssetMenu(menuName = "Event/VoidEventSO")]
public class VoidEventSO : ScriptableObject {
public UnityAction OnEventRaised;
public void RaiseEvent(){
OnEventRaised?.Invoke();
}
}
新增震动事件
修改CameraControl,接收并执行震动方法
public CinemachineImpulseSource cinemachineImpulseSource;//Cinemachine的冲击源,用于摄像机震动效果
public VoidEventSO voidEventSO;//无参数的事件ScriptableObject
private void OnEnable() {
voidEventSO.OnEventRaised += OnCameraShakeEvent;
}
private void OnDisable() {
voidEventSO.OnEventRaised -= OnCameraShakeEvent;
}
private void OnCameraShakeEvent()
{
cinemachineImpulseSource.GenerateImpulse();// 生成摄像机震动效果
}
配置
人物 敌人受伤都可以调用震动事件
效果
源码不出意外的话我会放在最后一节
https://space.bilibili.com/370283072
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,以便我第一时间收到反馈,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!
好了,我是向宇
,https://xiangyu.blog.csdn.net
一位在小公司默默奋斗的开发者,出于兴趣爱好,最近开始自学unity,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!php是工作,unity是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。