スポンサーリンク
スポンサーリンク
Unityゲームの作り方メモ

【Unity】2D無限ランアクションゲームの作り方

Unity

ユニティーを使用した2D無限ランアクションゲームの作り方のメモです。ゲーム制作の参考にしていただければ嬉しいです。トグルボタンをクリックすると記事が表示されます。小さくて見ずらい画像はクリックで拡大できます。

作成環境

Unityバージョン2021.3.8f1で作成しました。

新しく2Dプロジェクト作成し画面サイズはFullHDにしました。

UnityAssetStoreの使用素材

こちらのアセットを使用して作成しました。

床の配置

2dobject→Tilemap→RectangularからTilemapを作成しました。

名前はFloorにしました。

アセットに入っているtilemapを使用して床を敷きました。

inspector画面から新しくタグ&レイヤー【Floor】作成して設定しました。

タグまたはレイヤーのところをクリックしてaddTag,addLayerから作成できます。

Floorにアタッチするコンポーネント

作成した床に当たり判定を付けていきます。

Tilemap Collider 2Dused by compositeにチェックを入れる。
Composite Collider 2DTilemapColliderのつなぎ目を消すのに必要。
自動的にrigidbody2Dが追加される
Rigidbody 2DGravityScaleを0にする。Bodytypeをkinematicにする

Playerの配置

アセットのRunフォルダから画像を配置しました。

すでに走るアニメーションが作成されているのでこれを使用しました。

inspector画面から新しくタグとレイヤー【Player】を作成して設定しました。

プレイヤーにアタッチするコンポーネント

Animatorアセットのアニメーターコントローラー
player-run-1をアタッチする
Circlecolider2Dプレイヤーに当たり判定を付ける。
istriggerにチェックを入れる。
Rigidbody2DConstrainsのタブを開いて
FreezerotationZにチェックを入れる。

ジャンプと落下のアニメーションがなかったので作成しました。

どちらもjumpフォルダの画像一枚を追加しただけです。

新しくC#スクリプトを作成しました。名前はPlayerMoveにしました。

作成したスクリプトをプレイヤーにアタッチしました。

自動的に前に進んでいき、プレイヤーが地面についている時にだけジャンプできるようにしました。

プレイヤーが走るようになるスクリプトです。

スペースキーでジャンプすることができます。

using UnityEngine;

public class PlayerMove : MonoBehaviour
{
  //動く速度とジャンプ力
    [SerializeField]
    private float moveSpeed = 5f, jumpForce = 5f;
  
  //rigidbody
    private Rigidbody2D rb;

    //地面についているかの判定
    bool isJumping;

    
    private void Awake()
    {
        rb = GetComponent<Rigidbody2D>(); 
    }
    
    void Update()
    {
        Jump();
    }

    private void FixedUpdate()
    {
          MovePlayer();
    }

    private void MovePlayer() 
    {
    //プレイヤーが自動で進んでいく
        rb.velocity = new Vector2(moveSpeed, rb.velocity.y);
    }

    private void Jump() 
    {
        // ジャンプをするためのコード(スペースキーが押されて、ジャンプしていないとき)
        if (Input.GetKeyDown(KeyCode.Space) && !isJumping)
        {
            isJumping = true;
            // リジッドボディに力を加える(上方向にジャンプ力をかける)
            rb.AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse);
        }
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        //プレイヤーが地面に接触している時
        if (collision.gameObject.CompareTag("Floor"))
        {
            isJumping = false;
        }
    }
}

コードからプレイヤーがジャンプした時にアニメーションを再生するようにしました。

Animatorを開いて右クリックしてMaketrangitionで矢印を付けていきます。

paraetersの+をクリックしてFloatのパラメーター【Jump】boolのパラメーターRunを作成しました。

矢印を選択して項目を設定しました。

Run→JumphasexitTimeのチェックを外します。trunsitionsDuraratiorを0にする。ConditionsをJump,Greater,0.8(プレイヤーのYの位置が0の場合)に設定しました。
Run→FallhasexitTimeのチェックを外します。trunsitionsDuraratiorを0にする。ConditionsをJump,Less,0.8(プレイヤーのYの位置が0の場合)に設定しました。

新しくC#スクリプトを作成しました。名前はPlayerAnimationsにしました。

作成したスクリプトをプレイヤーにアタッチしました。

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

public class PlayerAnimation : MonoBehaviour
{
    private Animator animator;

    private void Awake()
    {
        animator= GetComponent<Animator>();
    }

    public void PlayJump(float velY)
    {
        animator.SetFloat("Jump", velY);
    }

    public void Running(bool running) 
    {
        animator.SetBool("Run", running);
    }
}

PlayerMoveを開いてコードを追加しました。


private PlayerAnimation playerAnimation;

 private void Awake()
    {
        playerAnimation = GetComponent<PlayerAnimation>();
    }

private void FixedUpdate()
    {
        AnimatePlayer();
    }

 private void AnimatePlayer() 
    {
        playerAnimation.PlayJump(rb.velocity.y);
        playerAnimation.Running(!isJumping);
    }

これでジャンプした時にアニメーションのが再生されるようになりました。

スポンサーリンク
C-BA memo
タイトルとURLをコピーしました