Unityゲームの作り方メモリズムゲーム

【Unity】初心者でも作れる!音ゲーの基本的な作り方

Unity

1. はじめに

Unityでゲーム開発をしていると、「音ゲーを作ってみたい!」と思ったことはありませんか?音ゲー(リズムゲーム)は、プレイヤーが音楽のリズムに合わせてボタンを押すことで、スコアを競ったり楽しく遊んだりするゲームです。リズム感を活かしてプレイするのが特徴で、多くの人に親しまれています。

今回は、Unityを使ってシンプルな音ゲーを作る方法を紹介します!初心者でもわかりやすいように、基本的なノーツの移動、譜面の読み込み、判定処理、ボタンの光エフェクト など、音ゲーに必要な要素を少しずつ実装していきます。

このチュートリアルを進めることで、Unityの基礎的な操作だけでなく、C#スクリプトを使ったノーツの動きの制御や、プレイヤーの入力に応じたエフェクトの変更 など、実際のゲーム開発で役立つスキルも学ぶことができます!

今回の記事で実装する機能

このチュートリアルでは、以下の機能を実装します。

ノーツの移動
リズムに合わせてノーツ(音符)が流れていく仕組みを作ります。
ノーツは一定のスピードで移動し、プレイヤーがボタンを押すタイミングで判定が行われるようにします。

譜面の読み込み
あらかじめ作成した譜面データをゲーム内に読み込んで、ノーツを自動で配置する機能を実装します。
これにより、異なる曲やリズムパターンにも対応できる拡張性のあるシステムを作ることができます。

ノーツの判定
プレイヤーがボタンを押したタイミングとノーツの位置を比較し、Perfect・Great・Bad・Missといった判定を行います。
この仕組みによって、スコア計算やリズムゲームらしい手応えを感じられるようになります。

ボタンの光エフェクト
プレイヤーがボタンを押した際に、対応するボタンが光るようにします。
視覚的なフィードバックを追加することで、ゲームの没入感を高めます。


これらの機能を組み合わせることで、シンプルながら本格的な音ゲーを作ることができます!
それでは、さっそく土台となるオブジェクトの作成から始めましょう! 🎵🎮




2. 土台の作成

音ゲーを作るための基盤となるオブジェクトを作成していきます。ここでは、ノーツが流れるレーンの作成と、視認性を向上させるための線の追加を行います。また、カメラの配置やマテリアルの設定も行い、見やすいゲーム画面を作っていきます!


✅ ベースとなるオブジェクト(Base)の作成

まずは、ノーツが流れるレーンの土台となるオブジェクトを作成します。

  1. ヒエラルキー(Hierarchy)ウィンドウで右クリック「3D Object」→「Cube」 を選択
  2. 作成したCubeの名前を 「Base」 に変更
  3. インスペクター(Inspector)ウィンドウでサイズを変更
    • Scale(スケール)(4,1, 24) に設定
    • これで横3マス分のレーンを持つ土台ができます

💡 ポイント
Base は音ゲーのフィールド全体を支えるオブジェクトになります。幅を大きめに設定することで、左右にレーンを作るスペースを確保できます。


✅ Baseの子オブジェクトとしてlineを作成し、LineRendererで線を引く

次に、ノーツが流れるレーンを視覚的に分かりやすくするために、ラインを追加します。

  1. ヒエラルキーウィンドウで「Base」を選択
  2. 「GameObject」→「Create Empty」 を選択して空のオブジェクトを作成
  3. 作成したオブジェクトの名前を 「line」 に変更
  4. インスペクターウィンドウで「Add Component」をクリック
  5. 「Line Renderer」コンポーネントを追加

次に、Line Renderer を使ってレーンの線を引きます。

  1. 「Line Renderer」コンポーネントの「Positions」の数を 2 に設定
  2. 1つ目の点(Element 0)を ( -2, 0.5, -5 ) に設定
  3. 2つ目の点(Element 1)を ( 2, 0.5, -5 ) に設定

💡 ポイント

  • Line Renderer を使うことで、テクスチャなしで簡単に線を描くことができます。
  • これにより、ノーツが流れるルートが視覚的に分かりやすくなります!

✅ カメラの配置とマテリアルの設定

最後に、ゲーム画面を見やすくするために、カメラの位置を調整し、オブジェクトのマテリアルを設定します。

カメラの位置調整

  1. 「Main Camera」を選択
  2. インスペクターで以下のように調整
    • 例.Rotation(回転)(45, 0, 0)

💡 ポイント
カメラを少し上から見下ろす角度 (45°) にすることで、ノーツの流れが確認しやすくなります!


マテリアルの作成と適用

ゲームの視認性を高めるため、Baseline に色をつけます。

  1. プロジェクトウィンドウで「Assets」を右クリック「Create」→「Material」 を選択
  2. 作成したマテリアルの名前を 「BaseMat」 に変更
  3. インスペクターで色を調整(例えば黒に設定するとレーンが見やすくなります)
  4. 「Base」にドラッグ&ドロップして適用

次に、line 用のマテリアルを作成します。

  1. 同じ手順で「LineMat」を作成
  2. 色をなどの見やすい色に変更
  3. 「line」にドラッグ&ドロップして適用

💡 ポイント
マテリアルを設定することで、レーンやラインの視認性が向上し、ノーツが見やすくなる効果があります!

これで、音ゲーの土台となる部分が完成しました!
次のステップでは、実際に ノーツを作成し、譜面データを使って流れるようにする処理 を実装していきます! 🎵🚀




3. ノーツの作成と移動

次に、プレイヤーが入力する対象となる ノーツ(音符) を作成し、流れるようにします。
このステップでは、ノーツのオブジェクトを作成し、C#スクリプトで自動的に移動させ、Prefabとして保存 するまでの手順を解説します!


✅ Cubeオブジェクト(notes)の作成とサイズ調整

まず、ノーツとして使用する Cube を作成し、見やすいサイズに調整します。

  1. ヒエラルキー(Hierarchy)ウィンドウで右クリック「3D Object」→「Cube」 を選択
  2. 作成した Cube の名前を 「notes」 に変更
  3. インスペクター(Inspector)ウィンドウでサイズを調整
    • Scale(スケール)(1, 0.01, 0.3) に設定

💡 ポイント
ノーツはレーンの中で流れるオブジェクトなので、小さすぎず、大きすぎないサイズ に調整しましょう!
(0.3のサイズなら、レーン内で適度に収まりつつ視認しやすくなります。)


✅ C#スクリプトでノーツが流れるようにする

次に、ノーツが一定のスピードで line に向かって移動するように スクリプトを作成 します。

  1. プロジェクトウィンドウで「Assets」を右クリック「Create」→「C# Script」 を選択
  2. 作成したスクリプトの名前を 「notes」 に変更
  3. notes スクリプトを開き、以下のコードを入力
using UnityEngine;

public class notes : MonoBehaviour
{
    // ノーツの移動速度
    public float notesSpeed = 1.0f;

    void Update()
    {
        // ノーツを前方(-Z方向)に移動させる
        transform.position -= transform.forward * Time.deltaTime * notesSpeed;
    }
}
  1. スクリプトを保存 して閉じる
  2. ヒエラルキーで「notes」オブジェクトを選択 し、作成した「notes」スクリプトをドラッグ&ドロップ してアタッチ

🎵 動作確認!
この状態で再生(▶ボタン)してみると、ノーツが前方に移動する ようになります!

💡 ポイント

  • notesSpeed の値を変更することで、ノーツの流れる速度を調整できます。
  • transform.forward を使うことで、ノーツがシンプルに -Z 方向へ流れるようになっています。

✅ 作成したノーツをPrefab化

ノーツは複数生成する必要があるため、Prefab(プレハブ)として保存し、繰り返し使えるように します!

  1. プロジェクトウィンドウで「Assets」を右クリック「Create」→「Folder」 を選択
  2. フォルダの名前を 「Prefabs」 に変更
  3. ヒエラルキーで「notes」オブジェクトを選択
  4. 「notes」を「Prefabs」フォルダへドラッグ&ドロップ してPrefab化
  5. ヒエラルキーから「notes」オブジェクトを削除(Prefabとして保存されたため、手動配置は不要)

🎵 これで、Prefabとして再利用できるノーツが完成しました!
次のステップでは、この notes Prefab を使って、譜面データに基づいてノーツを生成・配置 する処理を実装していきます! 🚀




4. ボタンを光らせる

音ゲーでは、プレイヤーがボタンを押したときに視覚的なフィードバックがあると、ゲームの楽しさが増します!
ここでは、レーンのボタンを光らせるエフェクト を実装し、DFJKキーを押したときに対応するレーンが光るようにします。


✅ ボタン用のCubeオブジェクト(light)を作成

まず、キー入力に対応するボタンオブジェクトを作成 します。

  1. ヒエラルキー(Hierarchy)ウィンドウで右クリック「3D Object」→「Cube」 を選択
  2. 作成した Cube の名前を 「light」 に変更
  3. インスペクター(Inspector)ウィンドウでサイズを調整
    • Scale(スケール)(1, 0.01, 15) に設定
    • これで、ノーツの通過地点に適したボタンの形状になります。
  4. 位置を調整(例:手前のレーンに配置)
    • Position(位置)( -1.5, 0.5, 0) に設定

✅ マテリアルを適用し、透明度を変化させる

ボタンを光らせるため、マテリアルを設定 し、透明度を変化できるようにします。

  1. プロジェクトウィンドウで「Assets」を右クリック「Create」→「Material」 を選択
  2. 作成したマテリアルの名前を 「LightMat」 に変更
  3. インスペクターで設定を変更
    • Rendering ModeFade に変更(透明度を制御可能にする)
    • Albedo(色) を好みの色に変更(光らせる色を設定)
  4. 作成した「LightMat」を「light」オブジェクトにドラッグ&ドロップ して適用

💡 ポイント
Fade モードにすることで、スクリプトから透明度(アルファ値)を変更 し、徐々に消える光のエフェクトを作れるようになります!


✅ C#スクリプトでDFJKキーを押したときにボタンが光る処理を実装

次に、ボタンを押したときに光るエフェクト を作るスクリプトを作成します。

  1. プロジェクトウィンドウで「Assets」を右クリック「Create」→「C# Script」 を選択
  2. 作成したスクリプトの名前を 「Light」 に変更
  3. LightEffect スクリプトを開き、以下のコードを入力
using UnityEngine;

public class Light : MonoBehaviour
{
    [SerializeField] private float Speed = 3;// 光の消える速度
    [SerializeField] private int num = 0;// 対応するキー
    private Renderer rend;
    private float alfa = 0;
    // Start is called before the first frame update
    void Start()
    {
        rend = GetComponent<Renderer>();
    }

    // Update is called once per frame
    void Update()
    {
        if (!(rend.material.color.a <= 0))
        {
            rend.material.color = new Color(rend.material.color.r, rend.material.color.r, rend.material.color.r, alfa);
        }

        if (num == 1)
        {
            if (Input.GetKeyDown(KeyCode.D))
            {
                colorChange();
            }
        }
        if (num == 2)
        {
            if (Input.GetKeyDown(KeyCode.F))
            {
                colorChange();
            }
        }
        if (num == 3)
        {
            if (Input.GetKeyDown(KeyCode.J))
            {
                colorChange();
            }
        }
        if (num == 4)
        {
            if (Input.GetKeyDown(KeyCode.K))
            {
                colorChange();
            }
        }
        alfa -= Speed * Time.deltaTime;

    }

    void colorChange()
    {
        alfa = 0.3f;
        rend.material.color = new Color(rend.material.color.r, rend.material.color.g, rend.material.color.b, alfa);
    }
}
  1. スクリプトを保存 して閉じる
  2. ヒエラルキーで「light」オブジェクトを選択 し、作成した「LightEffect」スクリプトをドラッグ&ドロップ してアタッチ

✅ ボタンを複製し、各キーに対応させる

DFJKキーに対応するために、ボタンオブジェクトを4つに増やし、それぞれに異なるキーを設定 します。

  1. 「light」オブジェクトを3回複製(Ctrl + D)
  2. 各オブジェクトの Position(位置) を調整
    • 1つ目(左レーン)( -1.5, 0.5, 0)
    • 2つ目(中央左)( -0.5, 0.5, 0)
    • 3つ目(中央右)( 0.5, 0.5, 0 )
    • 4つ目(右レーン)( 1.5, 0.5, 0 )
  3. 各オブジェクトの「Light」スクリプトの「Key Number」変数を設定
    • 1つ目(左)1(Dキー)
    • 2つ目(中央左)2(Fキー)
    • 3つ目(中央右)3(Jキー)
    • 4つ目(右)4(Kキー)

🎵 動作確認!

ここまで設定が完了したら、ゲームを再生(▶ボタン) してみましょう!

DFJKキーを押すと、対応するレーンのボタンが一瞬光る!
光は時間とともにフェードアウトしていく!

💡 ポイント

  • alpha = 0.3f の数値を調整することで、光る強さを変えられます。
  • fadeSpeed を変更すると、光が消える速さを調整できます。
  • LightEffect スクリプトを使うことで、どのキーを押したか視覚的に確認できるので、ゲームプレイの没入感が向上します!

これで、プレイヤーがDFJKキーを押したときに、レーンが光るエフェクト を実装できました! 🎮✨
次のステップでは、譜面データを読み込み、ノーツが譜面に沿って流れる処理 を作成していきます! 🚀




5. 譜面の作成と読み込み

音ゲーの魅力は、音楽に合わせてノーツが流れてくる仕組み にあります。
このステップでは、NoteEditorを使用して譜面を作成し、Unityにインポートしてノーツを譜面通りに生成する 方法を解説します! 🎵


✅ NoteEditorを使用して譜面を作成

まず、ノーツの配置を編集するために NoteEditorを使用します。
これは、リズムゲームの譜面を簡単に作成・編集できるツールです!

1. NoteEditorをダウンロードする

  1. 以下のサイトから「NoteEditor」をダウンロード
    (リンクが必要な場合は、検索エンジンで「Unity NoteEditor」などで探してください)
  2. ダウンロードしたファイルを解凍 します

2. UnityプロジェクトにNoteEditorをインポート

  1. 新しいUnityプロジェクトを作成
  2. 解凍した「NoteEditor-master」フォルダをUnityの「Assets」フォルダにドラッグ&ドロップ
  3. 「Scene」フォルダの中にある「NoteEditor」シーンを開く

3. NoteEditorを使って譜面を作成

  1. Unityの再生ボタン(▶)を押す
  2. 画面右上に表示される 音楽ファイルの保存フォルダパス を確認
  3. エクスプローラーを開き、指定されたフォルダに使用する音楽ファイル(MP3など)を追加
  4. 追加した音楽ファイルがNoteEditorに表示されるので選択し、読み込む
  5. 画面上の線をクリックしてノーツを配置
  6. 譜面が完成したらCtrl + Sで保存

💡 ポイント

  • NoteEditorを使うと、リズムに合わせてノーツを直感的に配置 できます!
  • 譜面のデータは JSON形式 で保存されるため、これをUnityで読み込んでノーツを生成します。

✅ 作成した譜面データをUnityにインポート

次に、作成した譜面データをUnityのプロジェクトに取り込む 手順です!

  1. Unityに戻り、「Assets」フォルダの中に「Resources」フォルダを作成
  2. 作成した譜面データ(.jsonファイル)を「Resources」フォルダにドラッグ&ドロップ

💡 ポイント

  • Unityの Resources フォルダ内に入れることで、C#スクリプトから簡単にファイルを読み込めるようになります!
  • Resources.Load<TextAsset>("ファイル名") という関数で、譜面データを取得できます。



✅ スクリプトで譜面データを読み込み、ノーツを生成する処理を作成

最後に、作成した譜面データを読み込み、ノーツを生成するスクリプト を作成します!

1. C#スクリプトを作成

  1. プロジェクトウィンドウで「Assets」を右クリック「Create」→「C# Script」 を選択
  2. スクリプトの名前を「NotesManager」に変更
  3. スクリプトを開き、以下のコードを入力
using System;
using System.Collections.Generic;
using UnityEngine;

[Serializable]
public class Data
{
    public string name;  // 曲名
    public int maxBlock; // 最大ブロック数
    public int BPM;      // BPM(曲のテンポ)
    public int offset;   // 開始タイミングのオフセット
    public Note[] notes; // ノーツ情報のリスト
}

[Serializable]
public class Note
{
    public int type;  // ノーツの種類(通常ノーツ・ロングノーツなど)
    public int num;   // 何拍目に配置されるか
    public int block; // どのレーンに配置されるか
    public int LPB;   // 1拍あたりの分割数
}

public class NotesManager : MonoBehaviour
{
    //総ノーツ数
    public int noteNum;
    //曲名
    private string songName;
    //ノーツのレーン
    public List<int> LaneNum = new List<int>();
    //ノーツの種類
    public List<int> NoteType = new List<int>();
    //ノーツが判定線と重なる時間
    public List<float> NotesTime = new List<float>();
    //gameobject
    public List<GameObject> NotesObj = new List<GameObject>();
    //ノーツの速度
    [SerializeField] private float NotesSpeed;
    //ノーツのprefabを入れる
    [SerializeField] GameObject noteObj;

    void OnEnable()
    {
        //総ノーツを0にする
        noteNum = 0;
        //読み込む譜面のファイル名を入力
        songName = "testmusic";

        Load(songName);
    }

    private void Load(string SongName)
    {
        //jsonファイルを読み込む
        string inputString = Resources.Load<TextAsset>(SongName).ToString();
        Data inputJson = JsonUtility.FromJson<Data>(inputString);

        //総ノーツ数を設定
        noteNum = inputJson.notes.Length;


        for (int i = 0; i < inputJson.notes.Length; i++)
        {
            //時間を計算
            float kankaku = 60 / (inputJson.BPM * (float)inputJson.notes[i].LPB);
            float beatSec = kankaku * (float)inputJson.notes[i].LPB;
            float time = (beatSec * inputJson.notes[i].num / (float)inputJson.notes[i].LPB) + inputJson.offset * 0.01f;
            //リストに追加
            NotesTime.Add(time);
            LaneNum.Add(inputJson.notes[i].block);
            NoteType.Add(inputJson.notes[i].type);
            
            float z = NotesTime[i] * NotesSpeed;
            //ノーツを生成
            NotesObj.Add(Instantiate(noteObj, new Vector3(inputJson.notes[i].block - 1.5f, 0.55f, z), Quaternion.identity));
        }
    }

}

2. NotesManagerスクリプトをUnityに適用

  1. ヒエラルキーで「空のオブジェクト」を作成(右クリック → 「Create Empty」)
  2. 名前を 「NotesManager」 に変更
  3. 作成した「NotesManager」オブジェクトに「NotesManagerスクリプト」をドラッグ&ドロップ してアタッチ
  4. インスペクターから「noteObj」にノーツのPrefab(先ほど作成したもの)を設定
  5. 「NotesSpeed」に適切な値(例: 5)を設定

🎵 動作確認!

ここまでの設定が完了したら、ゲームを再生(▶ボタン) してみましょう!

譜面データが読み込まれ、ノーツが譜面通りに流れてくる!
レーンの位置に合わせてノーツが配置される!

🎼 もっと簡単に譜面を作成したい?
Unity Asset Storeの「Rhythm Game Starter」を使えば、
本格的な譜面エディター付き で、カスタマイズも簡単!
自作する手間を省いて、すぐにリズムゲームの開発を始められます! 🎵

これで、譜面データを読み込み、それに沿ってノーツを生成する処理 を実装できました! 🎮✨
次のステップでは、ノーツの判定処理を追加し、プレイヤーがボタンを押したタイミングでスコアを判定する機能 を実装していきます! 🚀




6. ノーツの判定

音ゲーでは、プレイヤーが正しいタイミングでキーを押せたかを判定することが重要です!
このステップでは、Perfect・Great・Bad・Miss の判定を表示するUIの作成を実装していきます!


✅ 判定用のUIテキスト(Perfect, Great, Bad, Miss)の作成

まず、プレイヤーの入力に対する判定結果を視覚的に表示するUIテキストを作成します。

1. ヒエラルキーに判定用のUIテキストを追加

  1. ヒエラルキー(Hierarchy)ウィンドウで右クリック「UI」→「Text – TextMeshPro」 を選択
  2. 作成された Text の名前を 「PerfectText」 に変更
  3. インスペクター(Inspector)ウィンドウで設定を変更
    • TextPerfect に変更
    • Font Size50 に設定
    • Alignment中央揃え(Center)
    • Color黄色(#FFFF00)
  4. 他の判定テキスト(Great, Bad, Miss)も同様に作成
    • GreatText(オレンジ・#FFA500)
    • BadText(青・#0000FF)
    • MissText(赤・#FF0000)

💡 ポイント

  • 文字が画面中央に表示されるように、各テキストの 「Rect Transform」の位置を (0, 200, 0) に設定 してください。
  • 最初は非表示にするため、「Canvas Renderer」のチェックをオフ にしておきます。
  • 完成したらプレファブにします



✅ 判定スクリプトを実装し、入力タイミングに応じて判定を表示

次に、ノーツがラインに到達したタイミングでキーを押したか判定するスクリプト を作成します!

1. C#スクリプトを作成

  1. プロジェクトウィンドウで「Assets」を右クリック「Create」→「C# Script」 を選択
  2. スクリプトの名前を「Judge」に変更
  3. Judge スクリプトを開き、以下のコードを入力
using UnityEngine;

public class Judge : MonoBehaviour
{
    //プレイヤーに判定を伝えるゲームオブジェクト
    [SerializeField] private GameObject[] MessageObj;
    //NotesManagerを入れる変数
    [SerializeField] NotesManager notesManager;

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.D))//〇キーが押されたとき
        {
            if (notesManager.LaneNum[0] == 0)//押されたボタンはレーンの番号とあっているか?
            {
                Judgement(GetABS(Time.time - notesManager.NotesTime[0]));
                /*
                本来ノーツをたたく場所と実際にたたいた場所がどれくらいずれているかを求め、
                その絶対値をJudgement関数に送る
                */
            }
        }
        if (Input.GetKeyDown(KeyCode.F))
        {
            if (notesManager.LaneNum[0] == 1)
            {
                Judgement(GetABS(Time.time - notesManager.NotesTime[0]));
            }
        }
        if (Input.GetKeyDown(KeyCode.J))
        {
            if (notesManager.LaneNum[0] == 2)
            {
                Judgement(GetABS(Time.time - notesManager.NotesTime[0]));
            }
        }
        if (Input.GetKeyDown(KeyCode.K))
        {
            if (notesManager.LaneNum[0] == 3)
            {
                Judgement(GetABS(Time.time - notesManager.NotesTime[0]));
            }
        }

        if (Time.time > notesManager.NotesTime[0] + 0.2f)//本来ノーツをたたくべき時間から0.2秒たっても入力がなかった場合
        {
            message(3);
            deleteData();
            Debug.Log("Miss");
            //ミス
        }
    }
    void Judgement(float timeLag)
    {
        if (timeLag <= 0.10)//本来ノーツをたたくべき時間と実際にノーツをたたいた時間の誤差が0.1秒以下だったら
        {
            Debug.Log("Perfect");
            message(0);
            deleteData();
        }
        else
        {
            if (timeLag <= 0.15)//本来ノーツをたたくべき時間と実際にノーツをたたいた時間の誤差が0.15秒以下だったら
            {
                Debug.Log("Great");
                message(1);
                deleteData();
            }
            else
            {
                if (timeLag <= 0.20)//本来ノーツをたたくべき時間と実際にノーツをたたいた時間の誤差が0.2秒以下だったら
                {
                    Debug.Log("Bad");
                    message(2);
                    deleteData();
                }
            }
        }
    }
    float GetABS(float num)//引数の絶対値を返す関数
    {
        if (num >= 0)
        {
            return num;
        }
        else
        {
            return -num;
        }
    }

    //すでにたたいたノーツを削除する関数
    void deleteData()
    {
        notesManager.NotesTime.RemoveAt(0);
        notesManager.LaneNum.RemoveAt(0);
        notesManager.NoteType.RemoveAt(0);
    }

    //判定を表示する
    void message(int judge)
    {
        Instantiate(MessageObj[judge], new Vector3(notesManager.LaneNum[0] - 1.5f, 0.76f, 0.15f), Quaternion.Euler(45, 0, 0));
    }
}

2. スクリプトをUnityに適用

  1. ヒエラルキーで「空のオブジェクト」を作成(右クリック → 「Create Empty」)
  2. 名前を 「Judge」 に変更
  3. 作成した「Judge」オブジェクトに「Judgeスクリプト」をドラッグ&ドロップ してアタッチ
  4. インスペクターで以下の設定を行う
    • 「JudgeTexts」にPerfect, Great, Bad, MissのUIテキストをセット
    • 「NotesManager」に作成済みの「NotesManager」オブジェクトをセット

🎵 動作確認!

ここまで設定が完了したら、ゲームを再生(▶ボタン) してみましょう!

ノーツがラインに到達したタイミングでキーを押すと、Perfect・Great・Bad・Missの判定が表示される!
キーを押さなかった場合は、自動で「Miss」が表示される!

💡 ポイント

  • timeLag の許容範囲(0.10f, 0.15f, 0.20f)を調整することで、判定の厳しさを変えられます!
  • ShowJudgement 関数を修正すれば、判定時にエフェクトを追加することも可能です!

これで、ノーツの入力判定と、Perfect・Great・Bad・Missを表示する処理 が完成しました! 🎮✨




7. まとめ

お疲れさまでした! 🎉 これで、Unityを使ったシンプルな音ゲーが完成しました。
今回の記事では、ノーツの移動・譜面の読み込み・判定処理・ボタンの光エフェクト など、リズムゲームの基本的な仕組み を一通り実装しました。


🎵 さらなる改良のアイデア
音ゲーにおいて、音楽のクオリティはゲームの完成度に直結します。
せっかくなら、無料BGMではなく、プロが作った高品質な楽曲 を使用して、プレイヤーが楽しめるゲームにしましょう!
Ultimate Game Music Collection には、リズムゲームにも最適なBGMが豊富に収録 されています。
自作ゲームのクオリティをワンランクアップさせたい方におすすめ です!


🚀 より本格的な音ゲーを作りたいなら?
自作するのも楽しいですが、すぐに開発を加速させたいなら「Rhythm Game Starter」がおすすめ!

  • 高品質な譜面エディター
  • 多彩な判定システム
  • すぐに使えるノーツ・UI・エフェクト
    など、プロ仕様の音ゲー開発環境 が整っています! 🎮
    👉 Rhythm Game Starter をチェック!

Unityを使えば、アイデア次第で本格的な音ゲーに進化 させることができます! 🎮✨
今回のチュートリアルをベースに、ぜひ自分なりのオリジナル音ゲーを作ってみてください! 🚀🎶


あわせて読みたい

Unityで音ゲーを作るなら、以下の記事もあわせてチェックしておくと制作がスムーズになります!

よくある質問(FAQ)

Q
ノーツの動きを調整したい場合、どこを変更すればいいですか?
A

notesSpeed 変数の値を変更することで、ノーツの流れるスピードを調整できます。

Q
ノーツの判定をもっと正確にしたいです。どうすればいいですか?
A

判定の誤差許容範囲を Judgement 関数内の timeLag の値を調整することで改善できます。

Q
NoteEditorなしで自分で譜面データを作ることはできますか?
A

可能ですが、NoteEditorを使うと簡単に譜面を作成できるので、初心者の方にはおすすめです。

C-BA Unity-memo
タイトルとURLをコピーしました