2.5D游戏是如何做出来的呢,2.5D游戏快速制作教程

请添加图片描述

      • 前言
  • 【Unity实战篇 】 | 如何制作一款2.5D游戏,2.5D游戏制作案例
    • 一、2.5D 游戏概念
    • 二、绘制地图
    • 三、添加玩家动画和移动等操作
    • 四、视角配置
      • 4.1 调整摄像机与场景对象的角度
      • 4.2 增加镜头旋转功能
    • 五、游戏效果展示
  • 总结

请添加图片描述


前言

  • 玩过游戏的朋友都知道,市面上最常见的游戏多数分为2D和3D两种。
  • 2D和3D游戏之间的差异大家都知道,一个是类似纸片游戏属于二维层面,另一个则是在3D立体空间中游玩。
  • 其中还夹杂着一个2.5D游戏,本篇文章就来讲一下怎么通过Unity进行2.5D游戏是怎样的以及如何制作2.5D游戏。
  • 制作方法很简单,文中使用到了Tile Map制作2D地图,通过控制相机角度来形成伪3D来制作2.5D效果的游戏。
  • 下面就一起来看看到底是怎样制作的吧!

【Unity实战篇 】 | 如何制作一款2.5D游戏,2.5D游戏制作案例

一、2.5D 游戏概念

2.5D游戏 是一种介于二维和三维之间的游戏形式。它通常在二维平面上展示游戏内容,但利用三维技术来实现更加逼真的图像效果。

在2.5D游戏中,角色和环境通常是以平面的形式呈现,但可以在垂直方向上移动。这意味着玩家可以在一个相对较薄的虚拟空间内进行自由探索和交互,同时享受到更加立体感的视觉效果。

与传统的二维游戏相比,2.5D游戏可以通过使用透视、光影效果和深度感等技术来增强场景的真实感。这为玩家提供了更好的沉浸式体验,同时保留了传统2D游戏的简单和直观性。

许多平台游戏、角色扮演游戏和冒险游戏都采用了2.5D的形式,从而使玩家能够在一个相对较小的空间内尽情探索。2.5D游戏的发展也受益于技术的进步,使得游戏制作人员能够创建更加精美、逼真的图像效果,为玩家带来更好的游戏体验。

这种类型的游戏在平台游戏、动作游戏和冒险游戏等类型中比较常见, 例如八方旅人/歧路旅人这种游戏就是2.5D这类游戏的标杆之作了。
在这里插入图片描述

八方旅人画面演示

下面来看一下在Unity中如何制作一款2.5D的游戏吧!
请添加图片描述


二、绘制地图

首先我们需要搭建一个地图用于游戏测试,这里使用Unity的 Tile Map Editor 来搭建地图。

Tile Map Editor 的使用方法也很简单,可以看这篇文章学习下怎样使用Tile Map 快速搭建一个地图。
【Unity 实用工具篇】✨| 学会使用 可编程瓦片Tile Map,快速搭建2D地图

请添加图片描述

层级需要特别注意,这里把 TileMap RendererOrder in Layer 设置为0,这一层用于最下层背景显示,防止遮盖到其他对象。

搭建好的地图如下所示:
在这里插入图片描述

此时还需要在地图中增加一些场景物品,如大树、石头等等。

这里在面板中右键 2D Object -> Sprite 创建一个Sprite,然后在Sprite Renderer中设置想要的场景物体精灵图即可,这里要把 Order in Layer 设置为1,否则会看不到新创建的对象。
在这里插入图片描述

同时 要给这些添加的场景物品增加碰撞器,让玩家不能穿过该物体。
在这里插入图片描述

下面是添加完场景物品后的地图,看起来内容丰富了不少,效果好了很多。
在这里插入图片描述

在场景中新建一个游戏对象InteractionObject,将这些新建的场景物体全部放到InteractionObject对象下当做子物体,方便后期统一处理。


三、添加玩家动画和移动等操作

接下来再创建一个Sprite作为玩家,将 Order in Layer 层级 设置为1,并给玩家添加 Rigidbody2D刚体Collider碰撞体并适当的调整大小。
在这里插入图片描述

接下来在Project下右键 Create -> Animatior Controller创建一个 Animatior Controller 用来管理玩家的动画,主要有 上、下、左、右移动和默认的Idle动画。

点开Animatior面板后创建两个 BlendTree混合树
在这里插入图片描述

接下来在Animator面板创建两个 Float类型的参数 InputX 和 InputY 用来在混合树中接收使用。
在这里插入图片描述

双击点开Idle混合树,将Blend Type设置为 2D Simple Doirectional,这样我们就有两个参数用来表示二维平面上移动。
在这里插入图片描述

然后点击混合树面板的 + 添加四个Motion,分别将Idle的上、下、左、右动画添加上去,并将对应的PosX和PosY数值添加上去。

这里的PosX和PosY代表分别代表玩家按下X轴和Y轴的方向。

例如 PosX为1时代表玩家按下右方向键 此时X轴上的值为1,所以播放Idle_Right动画;
PosY为1时代表玩家按下上方向键 此时Y轴上的值为1,所以播放Idle_Back动画。
在这里插入图片描述

动画需要自己找资源配套使用哦!
在这里插入图片描述

同样的操作给Walk混合树也配置一下。
在这里插入图片描述

然后在Animator面板继续添加一个Bool类型的参数 IsMove,用来控制玩家的Idle和Walk状态的切换。
在这里插入图片描述
在这里插入图片描述

这样我们角色的动画就算配置好了,接下来写代码完成角色的移动方法和动画的播放就好了。

如果动画这块还不是很明白的话,也可以再去学习一下Unity中的动画相关知识:
Unity零基础到入门 ☀️| 近万字教程 对 Unity 中的 动画系统基础 全面解析+实战演练。

创建一个脚本PlayerMovement ,将其挂载到玩家身上。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float speed;
    new private Rigidbody2D rigidbody;
    private Animator animator;
    private float inputX, inputY;
    private float stopX, stopY;

    void Start()
    {
        rigidbody = GetComponent<Rigidbody2D>();
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        inputX = Input.GetAxisRaw("Horizontal");
        inputY = Input.GetAxisRaw("Vertical");
        
        //让玩家根据自己本地坐标进行向量计算
        Vector2 input = (transform.right * inputX + transform.up * inputY).normalized;
        rigidbody.velocity = input * speed;

        if (input != Vector2.zero)
        {
            animator.SetBool("IsMove", true);
            stopX = inputX;
            stopY = inputY;
        }
        else
        {
            animator.SetBool("IsMove", false);
        }
        animator.SetFloat("InputX", stopX);
        animator.SetFloat("InputY", stopY);

    }
}

可以选择将Main Camera放到玩家对象当做子物体,这样玩家移动时相机也可以跟着玩家移动,此时运行程序进行测试。
请添加图片描述

可以看到,此时的游戏画面就是单纯的2D游戏画面,看起来也没有2.5D的既视感,所以还需要对相机进行设置。


四、视角配置

4.1 调整摄像机与场景对象的角度

相机的设置其实很简单,只需要让其视选择45°,以俯视角的视角来观看场景。

先来新建一个游戏对象CameraPosition,将MainCamera放到该物体下作为子对象,再将MainCamera的Rotation设置为(-45,0,0),Position的数值可以根据搭建的地图进行微调,新建一个脚本RotatingCamera挂载到该对象上。

该脚本的作用是让相机一直跟随玩家移动,脚本内容如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RotatingCamera : MonoBehaviour
{
    private Transform player;
    void Start()
    {
        player = GameObject.FindGameObjectWithTag("Player").transform;
    }

    void Update()
    {
        transform.position = player.position;
    }
}

再新建一个脚本FacingCamera,将其挂载到前面搭建的场景对象的父物体InteractionObject上。

该脚本的作用是让该对象下的所有子物体的角度始终与相机的旋转角度对齐,代码如下:

using UnityEngine;

public class FacingCamera : MonoBehaviour
{
    Transform[] childs;
    void Start()
    {
        childs = new Transform[transform.childCount];
        for (int i = 0; i < transform.childCount; i++)
        {
            childs[i] = transform.GetChild(i);
        }
    }

    void Update()
    {
        for (int i = 0; i < childs.Length; i++)
        {
            childs[i].rotation = Camera.main.transform.rotation;
        }
    }
}

此时运行游戏查看效果:
请添加图片描述

4.2 增加镜头旋转功能

在有些2.5D游戏中还支持镜头的旋转,这里也加上这个功能看一下效果。

首先要修改RotatingCamera的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RotatingCamera : MonoBehaviour
{
    public float rotateTime = 0.2f;
    private Transform player;
    private bool isRotating = false;
    void Start()
    {
        player = GameObject.FindGameObjectWithTag("Player").transform;
    }

    void Update()
    {
        transform.position = player.position;

        Rotate();
    }

    void Rotate()
    {
        if (Input.GetKeyDown(KeyCode.Q) && !isRotating)
        {
            StartCoroutine(RotateAround(-45, rotateTime));
        }
        if (Input.GetKeyDown(KeyCode.E) && !isRotating)
        {
            StartCoroutine(RotateAround(45, rotateTime));
        }
    }

    IEnumerator RotateAround(float angel, float time)
    {
        float number = 60 * time;
        float nextAngel = angel / number;
        isRotating = true;

        WaitForFixedUpdate wait = new WaitForFixedUpdate();
        for (int i = 0; i < number; i++)
        {
            transform.Rotate(new Vector3(0, 0, nextAngel));
            yield return wait;
        }

        isRotating = false;
    }
}

加入一个按下 Q/E 键进行旋转的方法,通过协程每次按下时旋转45°,此时就大功告成了,下面一起看一下最终效果。
请添加图片描述


五、游戏效果展示

下面是2D风格 和 2.5D风格的对比,相对于2D画面,此处的2.5D仅仅是增加了一个相机的拍摄角度,画面风格看起来就有挺大的差异。

2D风格2.5D风格
请添加图片描述请添加图片描述

真正在制作2.5D游戏时,有非常多的细节需要处理,对于美术风格的标准要求也比较高,制作出来的画面也会更加好看。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


总结

  • 本文讲了一下关于2.5D游戏及其制作方法的演示。
  • 关于2.5D很多人的说法都不同,制作方案也有很多种,本文演示的也只是其中的一种解决方案。
  • 主要还是让大家了解一下关于2.5D的知识,以及简单的制作方法,不至于在提及2.5D游戏时一脸茫然。

  • 🎬 博客主页:https://xiaoy.blog.csdn.net

  • 🎥 本文由 呆呆敲代码的小Y 原创 🙉

  • 🎄 学习专栏推荐:Unity系统学习专栏

  • 🌲 游戏制作专栏推荐:游戏制作

  • 🌲Unity实战100例专栏推荐:Unity 实战100例 教程

  • 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

  • 📆 未来很长,值得我们全力奔赴更美好的生活✨

  • ------------------❤️分割线❤️-------------------------

请添加图片描述请添加图片描述请添加图片描述

请添加图片描述

资料白嫖,技术互助

学习路线指引(点击解锁)知识定位人群定位
🧡 Unity系统学习专栏 🧡入门级本专栏从Unity入门开始学习,快速达到Unity的入门水平
💛 Unity实战类项目 💛进阶级计划制作Unity的 100个实战案例!助你进入Unity世界,争取做最全的Unity原创博客大全。
❤️ 游戏制作专栏 ❤️ 难度偏高分享学习一些Unity成品的游戏Demo和其他语言的小游戏!
💚 游戏爱好者万人社区💚 互助/吹水数万人游戏爱好者社区,聊天互助,白嫖奖品
💙 Unity100个实用技能💙 Unity查漏补缺针对一些Unity中经常用到的一些小知识和技能进行学习介绍,核心目的就是让我们能够快速学习Unity的知识以达到查漏补缺

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/65561.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS NEXT,生命之树初长成

在不同的神话体系中&#xff0c;都有着关于生命之树的记载。 比如在北欧神话中&#xff0c;一株巨大的树木联结着九大世界&#xff0c;其被称为“尤克特拉希尔”Yggdrasill。在中国的《山海经》中&#xff0c;也有着“建木”的传说&#xff0c;它“有九欘&#xff0c;下有九枸&…

idea添加翻译插件并配置有道翻译

1、安装Translation插件 2、 创建有道云应用 有道智云控制台 3、设置idea 4、效果&#xff08;选中文本右键翻译&#xff0c;默认快捷键CtrlShiftY&#xff09;

安达发制造工业迈向智能化:APS高级计划排程助力提升生产效率

随着市场竞争的加剧&#xff0c;制造企业纷纷寻求提高生产效率和降低成本的方法。近年来&#xff0c;越来越多的制造企业开始采用APS(高级计划与排程)系统&#xff0c;以优化生产计划和排程&#xff0c;提高生产效率&#xff0c;并在竞争中取得优势。 现代制造业通常面临复杂的…

Idea中maven无法下载源码

今天在解决问题的时候想要下载源码&#xff0c;突然发现idea无法下载&#xff0c;这是真的蛋疼&#xff0c;没办法查看原因&#xff0c;最后发现问题的原因居然是因为Maven&#xff0c;由于我使用的idea的内置的Bundle3的Maven&#xff0c;之前没有研究过本地安装和内置的区别&…

ESP 32 蓝牙虚拟键盘链接笔记本电脑的键值问题

由于打算利用esp32 通过蓝牙链接电脑后实现一些特俗的键盘功能&#xff0c;所以就折腾了一下&#xff0c;折腾最耗费时间的却是键值问题&#xff0c;让一个20多年的老司机重新补充了知识 过程曲折就不说了&#xff0c;直接说结果。 我们通过网络搜索获取的键值和蓝牙模拟键盘传…

Leetcode-每日一题【剑指 Offer 11. 旋转数组的最小数字】

题目 把一个数组最开始的若干个元素搬到数组的末尾&#xff0c;我们称之为数组的旋转。 给你一个可能存在 重复 元素值的数组 numbers &#xff0c;它原来是一个升序排列的数组&#xff0c;并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如&#xff0c;数组 [3,4…

【论文阅读】对抗溯源图主机入侵检测系统的模仿攻击(NDSS-2023)

作者&#xff1a;伊利诺伊大学芝加哥分校-Akul Goyal、Gang Wang、Adam Bates&#xff1b;维克森林大学-Xueyuan Han、 引用&#xff1a;Goyal A, Han X, Wang G, et al. Sometimes, You Aren’t What You Do: Mimicry Attacks against Provenance Graph Host Intrusion Detect…

docker容器监控:Cadvisor +Prometheus+Grafana的安装部署

目录 Cadvisor PrometheusGrafana的安装部署 一、安装docker&#xff1a; 1、安装docker-ce 2、阿里云镜像加速器 3、下载组件镜像 4、创建自定义网络 二、部署Cadvisor 1、被监控主机上部署Cadvisor容器 2、访问cAdvisor页面 三、安装prometheus 1、部署Prometheus…

20230806将ASF格式的视频转换为MP4

20230806将ASF格式的视频转换为MP4 2023/8/6 18:47 缘起&#xff0c;自考中山大学的《计算机网络》&#xff0c;考试《数据库系统原理》的时候找到视频&#xff0c;由于个人的原因&#xff0c;使用字幕更加有学习效率&#xff01; 由于【重型】的PR2023占用资源较多&#xff0c…

Spring security之JWT

JWT 这里写目录标题 JWT一级目录二级目录三级目录1.什么是JWT 2.JWT的组成部分3.编码/解码4.特点5. 为什么使用JWT5.1传统的验证方式 5.2基于JWT的验证方式6.JWT进行登录验证6.1依赖安装6.2编写UserDetailServiceImpl类6.3编写UserDetailsImpl类6.4 实现config.SecurityConfig类…

算法与数据结构(二十二)动态规划解题套路框架

动态规划解题套路框架 此文只在个人总结 labuladong 动态规划框架&#xff0c;仅限于学习交流&#xff0c;版权归原作者所有&#xff1b; 动态规划问题&#xff08;Dynamic Programming&#xff09;应该是很多读者头疼的&#xff0c;不过这类问题也是最具有技巧性&#xff0c…

替换开源LDAP,某科技企业用宁盾目录统一身份,为业务敏捷提供支撑

客户介绍 某高科技企业成立于2015年&#xff0c;是一家深耕于大物流领域的人工智能公司&#xff0c;迄今为止已为全球16个国家和地区&#xff0c;120余家客户打造智能化升级体验&#xff0c;场景覆盖海陆空铁、工厂等货运物流领域。 该公司使用开源LDAP面临的挑战 挑战1 开源…

【用于全变分去噪的分裂布雷格曼方法】实施拆分布雷格曼方法进行总变异去噪研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

docker菜谱

DockerHub&#xff1a;https://hub.docker.com/ 记录docker常用软件安装&#xff0c;欢迎大家来投稿。&#x1f60e;&#x1f60e;&#x1f60e; 文章目录 1. Redis2. MariaDB 1. Redis dockerhub:https://hub.docker.com/_/redis 1、下载redis镜像&#xff1a; docker pull r…

【MFC】05.MFC第一大机制:程序启动机制-笔记

MFC程序开发所谓是非常简单&#xff0c;但是对于我们逆向人员来说&#xff0c;如果想要逆向MFC程序&#xff0c;那么我们就必须了解它背后的机制&#xff0c;这样我们才能够清晰地逆向出MFC程序&#xff0c;今天这篇文章就来带领大家了解MFC的第一大机制&#xff1a;程序启动机…

echarts 图表饼状图 实例

效果图&#xff1a; 代码&#xff1a; draw(data1, data2) {var option {// backgroundColor: rgb(10,36,68),color: [#F19611 ,#0095FE,#162D86,#0096FF,#05F8FF,#FFD985,#FACDAA,#F4A49E,#EE7B91,#E85285,#BE408C,#942D93,#171E6D,#1E3388,#27539B,#3073AE,#3993C2,#42B3D…

JVM如何调优

一、JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范&#xff0c;JVM将内存划分为&#xff1a; New&#xff08;年轻代&#xff09; Tenured&#xff08;年老代&#xff09; 永久代&#xff08;Perm&#xff09; 其中New和Tenured属于堆内存&#xff0c;堆内存会从JVM启动参…

day0808

1.单链表实现约瑟夫环 #include "joseph.h" LoopLink list_create(int m) {LoopLink L (LoopLink)malloc(sizeof(Node));if(NULLL){printf("内存创建失败\n");return 0;}LoopLink qL;for(int i1; i<m; i){LoopLink p (LoopLink)malloc(sizeof(Node));…

MyBatis-XML映射文件

XML映射文件 规范 XML映射文件的名称与Mapper接口名称一致&#xff08;EmpMapper对应EmpMpper.xml&#xff09;&#xff0c;并且将XML映射文件和Mapper接口放置在相同包下&#xff08;同包同名&#xff09; ​​​ 在maven项目结构中所有的配置文件都在resources目录之下&…

二级python和二级c哪个简单,二级c语言和二级python

大家好&#xff0c;小编为大家解答二级c语言和二级office一起报可以吗的问题。很多人还不知道计算机二级c语言和python哪个好考&#xff0c;现在让我们一起来看看吧&#xff01; 介绍Python有很多库和使用Qt编写的接口,这自然创建c调用Python的需求。一路摸索,充满艰辛的添加头…