小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

 敲代碼的小Y 2023-08-09 發(fā)布于上海


前言

  • 玩過游戲的朋友都知道,市面上最常見的游戲多數(shù)分為2D和3D兩種。
  • 2D和3D游戲之間的差異大家都知道,一個(gè)是類似紙片游戲?qū)儆诙S層面,另一個(gè)則是在3D立體空間中游玩。
  • 其中還夾雜著一個(gè)2.5D游戲,本篇文章就來講一下怎么通過Unity進(jìn)行2.5D游戲是怎樣的以及如何制作2.5D游戲。
  • 制作方法很簡(jiǎn)單,文中使用到了Tile Map制作2D地圖,通過控制相機(jī)角度來形成偽3D來制作2.5D效果的游戲。
  • 下面就一起來看看到底是怎樣制作的吧!

【Unity實(shí)戰(zhàn)篇 】 | 如何制作一款2.5D游戲,2.5D游戲制作案例

一、2.5D 游戲概念

2.5D游戲 是一種介于二維和三維之間的游戲形式。它通常在二維平面上展示游戲內(nèi)容,但利用三維技術(shù)來實(shí)現(xiàn)更加逼真的圖像效果。

在2.5D游戲中,角色和環(huán)境通常是以平面的形式呈現(xiàn),但可以在垂直方向上移動(dòng)。這意味著玩家可以在一個(gè)相對(duì)較薄的虛擬空間內(nèi)進(jìn)行自由探索和交互,同時(shí)享受到更加立體感的視覺效果。

與傳統(tǒng)的二維游戲相比,2.5D游戲可以通過使用透視、光影效果和深度感等技術(shù)來增強(qiáng)場(chǎng)景的真實(shí)感。這為玩家提供了更好的沉浸式體驗(yàn),同時(shí)保留了傳統(tǒng)2D游戲的簡(jiǎn)單和直觀性。

許多平臺(tái)游戲、角色扮演游戲和冒險(xiǎn)游戲都采用了2.5D的形式,從而使玩家能夠在一個(gè)相對(duì)較小的空間內(nèi)盡情探索。2.5D游戲的發(fā)展也受益于技術(shù)的進(jìn)步,使得游戲制作人員能夠創(chuàng)建更加精美、逼真的圖像效果,為玩家?guī)砀玫挠螒蝮w驗(yàn)。

這種類型的游戲在平臺(tái)游戲、動(dòng)作游戲和冒險(xiǎn)游戲等類型中比較常見, 例如八方旅人/歧路旅人這種游戲就是2.5D這類游戲的標(biāo)桿之作了。
在這里插入圖片描述

八方旅人畫面演示

下面來看一下在Unity中如何制作一款2.5D的游戲吧!
請(qǐng)?zhí)砑訄D片描述


二、繪制地圖

首先我們需要搭建一個(gè)地圖用于游戲測(cè)試,這里使用Unity的 Tile Map Editor 來搭建地圖。

Tile Map Editor 的使用方法也很簡(jiǎn)單,可以看這篇文章學(xué)習(xí)下怎樣使用Tile Map 快速搭建一個(gè)地圖。
【Unity 實(shí)用工具篇】?| 學(xué)會(huì)使用 可編程瓦片Tile Map,快速搭建2D地圖

請(qǐng)?zhí)砑訄D片描述

層級(jí)需要特別注意,這里把 TileMap RendererOrder in Layer 設(shè)置為0,這一層用于最下層背景顯示,防止遮蓋到其他對(duì)象。

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

此時(shí)還需要在地圖中增加一些場(chǎng)景物品,如大樹、石頭等等。

這里在面板中右鍵 2D Object -> Sprite 創(chuàng)建一個(gè)Sprite,然后在Sprite Renderer中設(shè)置想要的場(chǎng)景物體精靈圖即可,這里要把 Order in Layer 設(shè)置為1,否則會(huì)看不到新創(chuàng)建的對(duì)象。
在這里插入圖片描述

同時(shí) 要給這些添加的場(chǎng)景物品增加碰撞器,讓玩家不能穿過該物體。
在這里插入圖片描述

下面是添加完場(chǎng)景物品后的地圖,看起來內(nèi)容豐富了不少,效果好了很多。
在這里插入圖片描述

在場(chǎng)景中新建一個(gè)游戲?qū)ο?code>InteractionObject,將這些新建的場(chǎng)景物體全部放到InteractionObject對(duì)象下當(dāng)做子物體,方便后期統(tǒng)一處理。


三、添加玩家動(dòng)畫和移動(dòng)等操作

接下來再創(chuàng)建一個(gè)Sprite作為玩家,將 Order in Layer 層級(jí) 設(shè)置為1,并給玩家添加 Rigidbody2D剛體Collider碰撞體并適當(dāng)?shù)恼{(diào)整大小。
在這里插入圖片描述

接下來在Project下右鍵 Create -> Animatior Controller創(chuàng)建一個(gè) Animatior Controller 用來管理玩家的動(dòng)畫,主要有 上、下、左、右移動(dòng)和默認(rèn)的Idle動(dòng)畫。

點(diǎn)開Animatior面板后創(chuàng)建兩個(gè) BlendTree混合樹 。
在這里插入圖片描述

接下來在Animator面板創(chuàng)建兩個(gè) Float類型的參數(shù) InputX 和 InputY 用來在混合樹中接收使用。
在這里插入圖片描述

雙擊點(diǎn)開Idle混合樹,將Blend Type設(shè)置為 2D Simple Doirectional,這樣我們就有兩個(gè)參數(shù)用來表示二維平面上移動(dòng)。
在這里插入圖片描述

然后點(diǎn)擊混合樹面板的 + 添加四個(gè)Motion,分別將Idle的上、下、左、右動(dòng)畫添加上去,并將對(duì)應(yīng)的PosX和PosY數(shù)值添加上去。

這里的PosX和PosY代表分別代表玩家按下X軸和Y軸的方向。

例如 PosX為1時(shí)代表玩家按下右方向鍵 此時(shí)X軸上的值為1,所以播放Idle_Right動(dòng)畫;
PosY為1時(shí)代表玩家按下上方向鍵 此時(shí)Y軸上的值為1,所以播放Idle_Back動(dòng)畫。
在這里插入圖片描述

動(dòng)畫需要自己找資源配套使用哦!
在這里插入圖片描述

同樣的操作給Walk混合樹也配置一下。
在這里插入圖片描述

然后在Animator面板繼續(xù)添加一個(gè)Bool類型的參數(shù) IsMove,用來控制玩家的Idle和Walk狀態(tài)的切換。
在這里插入圖片描述
在這里插入圖片描述

這樣我們角色的動(dòng)畫就算配置好了,接下來寫代碼完成角色的移動(dòng)方法和動(dòng)畫的播放就好了。

如果動(dòng)畫這塊還不是很明白的話,也可以再去學(xué)習(xí)一下Unity中的動(dòng)畫相關(guān)知識(shí):
Unity零基礎(chǔ)到入門 ??| 近萬字教程 對(duì) Unity 中的 動(dòng)畫系統(tǒng)基礎(chǔ) 全面解析+實(shí)戰(zhàn)演練。

創(chuàng)建一個(gè)腳本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");
        
        //讓玩家根據(jù)自己本地坐標(biāo)進(jìn)行向量計(jì)算
        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放到玩家對(duì)象當(dāng)做子物體,這樣玩家移動(dòng)時(shí)相機(jī)也可以跟著玩家移動(dòng),此時(shí)運(yùn)行程序進(jìn)行測(cè)試。
請(qǐng)?zhí)砑訄D片描述

可以看到,此時(shí)的游戲畫面就是單純的2D游戲畫面,看起來也沒有2.5D的既視感,所以還需要對(duì)相機(jī)進(jìn)行設(shè)置。


四、視角配置

4.1 調(diào)整攝像機(jī)與場(chǎng)景對(duì)象的角度

相機(jī)的設(shè)置其實(shí)很簡(jiǎn)單,只需要讓其視選擇45°,以俯視角的視角來觀看場(chǎng)景。

先來新建一個(gè)游戲?qū)ο?code>CameraPosition,將MainCamera放到該物體下作為子對(duì)象,再將MainCamera的Rotation設(shè)置為(-45,0,0),Position的數(shù)值可以根據(jù)搭建的地圖進(jìn)行微調(diào),新建一個(gè)腳本RotatingCamera掛載到該對(duì)象上。

該腳本的作用是讓相機(jī)一直跟隨玩家移動(dòng),腳本內(nèi)容如下:

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;
    }
}

再新建一個(gè)腳本FacingCamera,將其掛載到前面搭建的場(chǎng)景對(duì)象的父物體InteractionObject上。

該腳本的作用是讓該對(duì)象下的所有子物體的角度始終與相機(jī)的旋轉(zhuǎn)角度對(duì)齊,代碼如下:

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;
        }
    }
}

此時(shí)運(yùn)行游戲查看效果:
請(qǐng)?zhí)砑訄D片描述

4.2 增加鏡頭旋轉(zhuǎn)功能

在有些2.5D游戲中還支持鏡頭的旋轉(zhuǎn),這里也加上這個(gè)功能看一下效果。

首先要修改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;
    }
}

加入一個(gè)按下 Q/E 鍵進(jìn)行旋轉(zhuǎn)的方法,通過協(xié)程每次按下時(shí)旋轉(zhuǎn)45°,此時(shí)就大功告成了,下面一起看一下最終效果。
請(qǐng)?zhí)砑訄D片描述


五、游戲效果展示

下面是2D風(fēng)格 和 2.5D風(fēng)格的對(duì)比,相對(duì)于2D畫面,此處的2.5D僅僅是增加了一個(gè)相機(jī)的拍攝角度,畫面風(fēng)格看起來就有挺大的差異。

2D風(fēng)格2.5D風(fēng)格
請(qǐng)?zhí)砑訄D片描述請(qǐng)?zhí)砑訄D片描述

真正在制作2.5D游戲時(shí),有非常多的細(xì)節(jié)需要處理,對(duì)于美術(shù)風(fēng)格的標(biāo)準(zhǔn)要求也比較高,制作出來的畫面也會(huì)更加好看。

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述


總結(jié)

  • 本文講了一下關(guān)于2.5D游戲及其制作方法的演示。
  • 關(guān)于2.5D很多人的說法都不同,制作方案也有很多種,本文演示的也只是其中的一種解決方案。
  • 主要還是讓大家了解一下關(guān)于2.5D的知識(shí),以及簡(jiǎn)單的制作方法,不至于在提及2.5D游戲時(shí)一臉茫然。

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

  • 🎥 本文由 呆呆敲代碼的小Y 原創(chuàng) 🙉

  • 🎄 學(xué)習(xí)專欄推薦:Unity系統(tǒng)學(xué)習(xí)專欄

  • 🌲 游戲制作專欄推薦:游戲制作

  • 🌲Unity實(shí)戰(zhàn)100例專欄推薦:Unity 實(shí)戰(zhàn)100例 教程

  • 🏅 歡迎點(diǎn)贊 👍 收藏 ?留言 📝 如有錯(cuò)誤敬請(qǐng)指正!

  • 📆 未來很長(zhǎng),值得我們?nèi)Ρ几案篮玫纳?

  • ------------------??分割線??-------------------------

請(qǐng)?zhí)砑訄D片描述請(qǐng)?zhí)砑訄D片描述請(qǐng)?zhí)砑訄D片描述

請(qǐng)?zhí)砑訄D片描述

資料白嫖,技術(shù)互助

學(xué)習(xí)路線指引(點(diǎn)擊解鎖)知識(shí)定位人群定位
🧡 Unity系統(tǒng)學(xué)習(xí)專欄 🧡入門級(jí)本專欄從Unity入門開始學(xué)習(xí),快速達(dá)到Unity的入門水平
💛 Unity實(shí)戰(zhàn)類項(xiàng)目 💛進(jìn)階級(jí)計(jì)劃制作Unity的 100個(gè)實(shí)戰(zhàn)案例!助你進(jìn)入U(xiǎn)nity世界,爭(zhēng)取做最全的Unity原創(chuàng)博客大全。
?? 游戲制作專欄 ?? 難度偏高分享學(xué)習(xí)一些Unity成品的游戲Demo和其他語言的小游戲!
💚 游戲愛好者萬人社區(qū)💚 互助/吹水數(shù)萬人游戲愛好者社區(qū),聊天互助,白嫖獎(jiǎng)品
💙 Unity100個(gè)實(shí)用技能💙 Unity查漏補(bǔ)缺針對(duì)一些Unity中經(jīng)常用到的一些小知識(shí)和技能進(jìn)行學(xué)習(xí)介紹,核心目的就是讓我們能夠快速學(xué)習(xí)Unity的知識(shí)以達(dá)到查漏補(bǔ)缺

在這里插入圖片描述

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多