【制作100个unity游戏之26】unity2d横版卷轴动作类游戏8(附带项目源码)

简介: 【制作100个unity游戏之26】unity2d横版卷轴动作类游戏8(附带项目源码)

前言

欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第26篇中,我们将探索如何用unity制作一个unity2d横版卷轴动作类游戏,我会附带项目源码,以便你更好理解它。


本节主要是实现相机跟随和区域限制,相机震动反馈

相机跟随和区域限制

不懂的可以查看我这篇文章:

【推荐100个unity插件之10】Unity最全的最详细的Cinemachine(虚拟相机系统)介绍,详细案例讲解,快速上手

【Unity小技巧】如何在 Unity中使用我们的Cinemachine虚拟相机跟踪多个目标

新增2d虚拟相机

可以添加pixel perfect.相机,他能帮助,在我们的像素旋转或产生畸变的时候,不会出现像素扭曲,保持我们的单位像素

区域限制

配置区域大小

效果

image.png

画面跟随抖动问题

如果你的相机在跟随时出现画面有点抖动的问题,可以选择修改相机的更新方法为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

目录
相关文章
|
2天前
|
存储 JSON 关系型数据库
【unity实战】制作unity数据保存和加载系统——大型游戏存储的最优解
【unity实战】制作unity数据保存和加载系统——大型游戏存储的最优解
11 2
|
2天前
|
图形学
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)(上)
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)
10 2
|
2天前
|
存储 JSON 图形学
【unity实战】制作unity数据保存和加载系统——小型游戏存储的最优解
【unity实战】制作unity数据保存和加载系统——小型游戏存储的最优解
6 0
|
2天前
|
图形学
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)(下)
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)(下)
8 0
|
2天前
|
图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版3(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版3(附带项目源码)
13 2
|
2天前
|
图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版2(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版2(附带项目源码)
8 1
|
2天前
|
存储 JSON 关系型数据库
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版13(完结,附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版13(完结,附带项目源码)
9 0
|
2天前
|
图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版12(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版12(附带项目源码)
8 0
|
2天前
|
存储 图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版11(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版11(附带项目源码)
6 0
|
2天前
|
图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版10(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版10(附带项目源码)
7 0