[Unity を使用して 100 点中 9 点のゲームを実現] Unity を使用して、「Octopath Traveler」や「Don't Starve」のような見下ろし型の 2.5D ゲームを作成します。

序文

2.5D ゲームは、2 次元と 3 次元の間のゲームの形式です。通常、ゲーム コンテンツは 2 次元平面上に表示されますが、3 次元技術を使用して、よりリアルな映像効果を実現します。

2.5D ゲームでは、キャラクターと環境は通常平面として表示されますが、垂直に移動することができます。これは、プレイヤーがより 3 次元の視覚効果を楽しみながら、比較的薄い仮想空間内を自由に探索して対話できることを意味します。

従来の 2D ゲームと比較して、2.5D ゲームは、遠近法、光と影の効果、奥行き知覚などの技術を使用することで、シーンのリアリズムを高めることができます。これにより、従来の 2D ゲームのシンプルさと直観性を維持しながら、プレイヤーはより優れた没入感を得ることができます。

多くのプラットフォーマー、ロールプレイング ゲーム、アドベンチャー ゲームは 2.5D フォーマットを使用しており、プレイヤーは比較的狭い空間を探索できます。2.5D ゲームの開発も技術の進歩の恩恵を受けており、ゲーム制作者はより精緻でリアルな画像効果を作成できるようになり、プレイヤーにより良いゲーム体験をもたらすことができます。

このタイプのゲームはプラットフォーム ゲーム、アクション ゲーム、アドベンチャー ゲームで比較的一般的で、『オクトパス トラベラー』や『ドント スターブ』などのゲームが 2.5D ゲームのベンチマークです。

まず、この記事で達成される最終的な効果を見てみましょう
ここに画像の説明を挿入します

素材

https://assetstore.unity.com/packages/2d/characters/tiny-rpg-forest-114685
ここに画像の説明を挿入します

1. 地図を描く

まずゲームのテスト用のマップを構築する必要がありますが、ここでは Unity のタイル マップ エディターを使用して簡単なマップを構築します。

ここに画像の説明を挿入します
このレベルには特別な注意が必要です。ここでは、TileMap レンダラーのレイヤー内の順序が 0 に設定されています。このレイヤーは、他のオブジェクトが隠れないように下部の背景表示に使用されます。

構築されたマップは次のようになります。
ここに画像の説明を挿入します

このとき、大きな木や石などのシーン アイテムをマップに追加する必要もあります。

ここでは、パネルで 2D Object -> Sprite を右クリックしてスプライトを作成し、スプライト レンダラーで目的のシーン オブジェクトのスプライト マップを設定します。ここでは、レイヤーの順序を 1 に設定する必要があります。そうしないと表示されません新しく作成されたオブジェクト。
ここに画像の説明を挿入します
同時に、プレイヤーがオブジェクトを通過できないように、これらの追加されたシーン アイテムにコライダーを追加する必要があります。
ここに画像の説明を挿入します
以下はシーンアイテムを追加した後のマップですが、内容がより豊富になり、効果も大幅に向上しているようです。
ここに画像の説明を挿入します
シーン内に新しいゲーム オブジェクト InteractionObject を作成し、これらの新しく作成されたシーン オブジェクトをすべて InteractionObject オブジェクトの下にサブオブジェクトとして配置し、後の段階での統一処理を容易にします。

2. プレイヤーのアニメーションや動きなどの操作を追加する

次に、プレイヤーとして Sprite を作成し、Order in Layer レベルを 1 に設定し、Rigidbody2D 剛体と Collider 衝突ボディをプレイヤーに追加し、サイズを適切に調整します。
ここに画像の説明を挿入します

次に、プロジェクトの下で [作成] -> [アニメーター コントローラー] を右クリックして、主に上下左右の動きとデフォルトのアイドル アニメーションを含むプレーヤーのアニメーションを管理するアニメーター コントローラーを作成します。

Animatio パネルをクリックし、2 つの BlendTree ハイブリッド ツリーを作成します。
ここに画像の説明を挿入します

次に、Animator パネルで 2 つの Float タイプのパラメータ、InputX と InputY を作成し、ミキシング ツリーで受け取って使用します。
ここに画像の説明を挿入します
ダブルクリックしてアイドル ブレンド ツリーを開き、ブレンド タイプを 2D Simple Directional に設定します。これにより、2 次元平面上の動きを表す 2 つのパラメーターが得られます。
ここに画像の説明を挿入します
次に、[ミキシング ツリー]パネルで [+] をクリックして 4 つのモーションを追加し、アイドルの上下左右のアニメーションをそれぞれ追加し、対応する PosX および PosY 値を追加します。

ここでの PosX 表現と PosY 表現は、それぞれプレイヤーが X 軸と Y 軸を押す方向を表します。

たとえば、PosX が 1 の場合、プレーヤーが右方向キーを押し、X 軸の値が 1 であるため、Idle_Right アニメーションが再生されることを意味し、PosY が 1 の場合、プレーヤーが上方向キーを押したことを意味します
。 Y 軸の値は 1 なので、Idle_Back アニメーションが再生されます。
ここに画像の説明を挿入します
同じ操作を実行して、Walk ハイブリッド ツリーを構成します。
ここに画像の説明を挿入します
次に、プレイヤーのアイドル状態とウォーク状態の切り替えを制御するために、Animator パネルに Bool 型パラメータ IsMove を追加します。
ここに画像の説明を挿入します
ここに画像の説明を挿入します
このように、キャラクターのアニメーションが設定されている場合でも、コードを記述するだけでキャラクターの移動方法とアニメーションの再生を完了できます。

まだアニメーションをよく理解していない場合は、Unity のアニメーションについて詳しく学ぶこともできます: Unity の
基本から入門まで ☀️| この約 10,000 語のチュートリアルでは、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);

    }
}

プレーヤーの移動時にカメラがプレーヤーを追従できるように、メイン カメラを子オブジェクトとしてプレーヤー オブジェクト上に配置することを選択できます。この時点で、テスト用のプログラムを実行します。
ここに画像の説明を挿入します
このときのゲーム画面は純粋な2Dゲーム画面であり、2.5Dゲームのようには見えないため、やはりカメラの設定が必要であることがわかります。

3. 視野角構成

シーンのオブジェクトに合わせてカメラの角度を調整します

カメラの設定は実は非常にシンプルで、45°を選択するだけで俯瞰で見ることができます。

まず、新しいゲーム オブジェクト CameraPosition を作成し、その下に MainCamera をサブオブジェクトとして配置し、MainCamera の Rotation を (-45, 0, 0) に設定します。Position の値は、それに応じて微調整できます。このオブジェクトにマウントされる新しいスクリプト RotatingCamera を作成します。ウェブサイト:yii666.com

このスクリプトの機能は、カメラをプレイヤーの動きに追従させることです。スクリプトの内容は次のとおりです。

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

次に、ゲームを実行して効果を確認します。
ここに画像の説明を挿入します

レンズ回転機能を追加

一部の 2.5D ゲームではカメラの回転もサポートされています (Don't Starve など)。この機能をここに追加して効果を確認してみましょう。

まず、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 度回転します。これで完了です。最終的な効果を見てみましょう。
ここに画像の説明を挿入します

4. ゲームエフェクト表示

以下は 2D スタイルと 2.5D スタイルの比較ですが、2D 映像と比較すると、2.5D はカメラの撮影アングルが追加されただけで、映像スタイルは大きく異なります。

2D スタイル 2.5Dスタイル
ここに画像の説明を挿入します ここに画像の説明を挿入します

仕上げる

実際に2.5Dゲームを作るとなると、細かい処理が多く、アートスタイルの基準も比較的高く、より美しい絵が完成します。
ここに画像の説明を挿入します
ここに画像の説明を挿入します

  • この記事では、2.5Dゲームのデモンストレーションとその制作方法について説明します。
  • 2.5D についてはさまざまな意見があり、制作ソリューションも多数ありますが、この記事ではそのうちの 1 つを紹介します。
  • 2.5次元ゲームと言ったときに混乱しないように、2.5次元の知識や簡単な制作方法を皆さんに知ってもらうことが重要です。

ソースコード

https://github.com/RedFF0000/Don-t-Starve

参考

【動画】https://www.bilibili.com/video/BV1DT4y1A7DJ/

終わり

バラの贈り物、香りを贈りましょう!点赞评论和关注この記事の内容が役に立った場合は、できるだけ早くフィードバックを受け取ることができるよう、ケチらずにフィードバックをお送りください。フィードバックは支持、私が創作を続ける最大のモチベーションです。もちろん、記事内で存在错误何かを見つけた場合は更好的解决方法、お気軽にコメントしてプライベートメッセージを送ってください。

はい、私向宇https://xiangyu.blog.csdn.net

小さな会社で黙々と働いていた開発者が、最近興味本位でUnityを独学で勉強し始めました。何か問題が発生した場合は、コメントやプライベート メッセージを送っていただければ幸いです。私が必ずしも問題を知っているわけではないかもしれませんが、すべての関係者からの情報を確認し、最善の提案を提供できるよう努めます。プログラミングを学びたい人が増えますよ、みんなで励まし合いましょう〜
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_36303853/article/details/132734810