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

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

前言

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

本节主要是控制人物移动跳跃

新输入系统 New Input System

新增Player Input组件,点击创建新的输入系统,生成之后就可以删除Player Input组件了

会自动给我们创建好一些必备输入参数,比如移动

代码调用,点击自动生成代码

新增PlayerController ,代码调用

public class PlayerController : MonoBehaviour
{
    public PlayerInputControl inputControl;
    public Vector2 inputDirection;
    public float speed;
    private Rigidbody2D rb;
    private void Awake()
    {
        // 初始化输入控制
        inputControl = new PlayerInputControl();
        rb = GetComponent<Rigidbody2D>();
    }

    private void OnEnable()
    {
        // 启用输入控制
        inputControl.Enable();
    }

    private void OnDisable()
    {
        // 禁用输入控制
        inputControl.Disable();
    }

    private void Update()
    {
        // 获取输入方向
        inputDirection = inputControl.Player.Move.ReadValue<Vector2>();
    }

    private void FixedUpdate()
    {
        Move();
    }

    //移动角色
    private void Move()
    {
        // 根据输入方向移动角色
        rb.velocity = new Vector2(inputDirection.x * speed * Time.deltaTime, rb.velocity.y);
        // 根据输入方向翻转角色
        if (inputDirection.x < 0)
        {
            transform.localScale = new Vector3(-Mathf.Abs(transform.localScale.x), transform.localScale.y, transform.localScale.z);
        }
        else if (inputDirection.x > 0)
        {
            transform.localScale = new Vector3(Mathf.Abs(transform.localScale.x), transform.localScale.y, transform.localScale.z);
        }
    }
}

配置

效果(忽略动画,因为这个我是后录的)

跳跃

键盘

手柄,如果有的话

修改PlayerController

using UnityEngine.InputSystem;

public float jumpForce;

private void Awake()
{
    // 初始化输入控制
    inputControl = new PlayerInputControl();
    rb = GetComponent<Rigidbody2D>();

    inputControl.Player.Jump.started += Jump;
}
    
//跳跃
private void Jump(InputAction.CallbackContext context){
    rb.AddForce(transform.up * jumpForce, ForceMode2D.Impulse);
}

效果(忽略动画,因为这个我是后录的)

地面检测,禁止无限跳跃

想要更加精准的地面检测,可以看我这篇文章:【unity技巧】Physics2D Raycast、Overlapcircle、OverlapBox检测的用法

新增PhysicsCheck ,做地面地面检测

public class PhysicsCheck : MonoBehaviour
{
    public Vector2 bottomOffset;// 检测圆形底部偏移量
    public float checkRadius; // 圆形检测半径
    public LayerMask groundLayer; // 地面图层
    public bool isGround; // 是否在地面上

    private void Update()
    {
        Check();
    }

    public void Check()
    {
        // 检测是否在地面上
        isGround = Physics2D.OverlapCircle(transform.position, checkRadius, groundLayer);
    }

    private void OnDrawGizmosSelected()
    {
        // 在 Scene 视图中绘制检测范围
        Gizmos.DrawWireSphere((Vector2)transform.position + bottomOffset, checkRadius);
    }
}

修改PlayerController

private PhysicsCheck physicsCheck;

physicsCheck = GetComponent<PhysicsCheck>();

//跳跃
private void Jump(InputAction.CallbackContext context){
    if(physicsCheck.isGround) rb.AddForce(transform.up * jumpForce, ForceMode2D.Impulse);
}

配置

效果(忽略动画,因为这个我是后录的)

取消摩檫力

默认碰撞体之间是存在摩檫力的,当人物跳跃到墙体时,可能出现卡墙的情况

新建2d的物理材质

摩檫力设置为0

配置

效果(忽略动画,因为这个我是后录的)

源码

源码不出意外的话我会放在最后一节

目录
相关文章
|
2月前
|
编译器 vr&ar 图形学
从零开始的unity3d入门教程(五)---- 基于Vuforia的AR项目
这是一篇Unity3D结合Vuforia实现增强现实(AR)项目的入门教程,涵盖了环境配置、Vuforia账户注册、Target数据集创建、Unity项目设置、AR程序配置、Android环境配置以及最终在手机上测试运行的全过程。
从零开始的unity3d入门教程(五)---- 基于Vuforia的AR项目
|
2月前
|
API 开发工具 vr&ar
PicoVR Unity SDK⭐️一、SDK下载、项目设置与程序初始配置
PicoVR Unity SDK⭐️一、SDK下载、项目设置与程序初始配置
|
4月前
|
图形学
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)(上)
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)
175 2
|
4月前
|
图形学
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)(下)
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)(下)
67 0
|
4月前
|
存储 JSON 关系型数据库
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版13(完结,附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版13(完结,附带项目源码)
78 0
|
4月前
|
图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版12(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版12(附带项目源码)
50 0
|
2月前
|
图形学 C#
超实用!深度解析Unity引擎,手把手教你从零开始构建精美的2D平面冒险游戏,涵盖资源导入、角色控制与动画、碰撞检测等核心技巧,打造沉浸式游戏体验完全指南
【8月更文挑战第31天】本文是 Unity 2D 游戏开发的全面指南,手把手教你从零开始构建精美的平面冒险游戏。首先,通过 Unity Hub 创建 2D 项目并导入游戏资源。接着,编写 `PlayerController` 脚本来实现角色移动,并添加动画以增强视觉效果。最后,通过 Collider 2D 组件实现碰撞检测等游戏机制。每一步均展示 Unity 在 2D 游戏开发中的强大功能。
112 6
|
1月前
|
测试技术 C# 图形学
掌握Unity调试与测试的终极指南:从内置调试工具到自动化测试框架,全方位保障游戏品质不踩坑,打造流畅游戏体验的必备技能大揭秘!
【9月更文挑战第1天】在开发游戏时,Unity 引擎让创意变为现实。但软件开发中难免遇到 Bug,若不解决,将严重影响用户体验。调试与测试成为确保游戏质量的最后一道防线。本文介绍如何利用 Unity 的调试工具高效排查问题,并通过 Profiler 分析性能瓶颈。此外,Unity Test Framework 支持自动化测试,提高开发效率。结合单元测试与集成测试,确保游戏逻辑正确无误。对于在线游戏,还需进行压力测试以验证服务器稳定性。总之,调试与测试贯穿游戏开发全流程,确保最终作品既好玩又稳定。
56 4
|
2月前
|
图形学 缓存 算法
掌握这五大绝招,让您的Unity游戏瞬间加载完毕,从此告别漫长等待,大幅提升玩家首次体验的满意度与留存率!
【8月更文挑战第31天】游戏的加载时间是影响玩家初次体验的关键因素,特别是在移动设备上。本文介绍了几种常见的Unity游戏加载优化方法,包括资源的预加载与异步加载、使用AssetBundles管理动态资源、纹理和模型优化、合理利用缓存系统以及脚本优化。通过具体示例代码展示了如何实现异步加载场景,并提出了针对不同资源的优化策略。综合运用这些技术可以显著缩短加载时间,提升玩家满意度。
60 5
|
1月前
|
前端开发 图形学 开发者
【独家揭秘】那些让你的游戏瞬间鲜活起来的Unity UI动画技巧:从零开始打造动态按钮,提升玩家交互体验的绝招大公开!
【9月更文挑战第1天】在游戏开发领域,Unity 是最受欢迎的游戏引擎之一,其强大的跨平台发布能力和丰富的功能集让开发者能够迅速打造出高质量的游戏。优秀的 UI 设计对于游戏至关重要,尤其是在手游市场,出色的 UI 能给玩家留下深刻的第一印象。Unity 的 UGUI 系统提供了一整套解决方案,包括 Canvas、Image 和 Button 等组件,支持添加各种动画效果。
86 3