UnityUnityメモ

Unity初心者向け!触れたオブジェクトを記録して名前を表示する簡単な方法

Unity

1. はじめに

Unityを使ってゲームやアプリケーションを作成する中で、オブジェクト同士が触れ合うことで特定の動作を実行したり、データを処理することはとてもよくあるケースです。例えば、キャラクターがコインに触れるとスコアが加算される仕組みなどが挙げられます。

この記事では、「Cube」という3Dオブジェクトを動かし、触れた他のオブジェクトの名前を配列に記録して、画面に表示する方法を学びます。この方法を理解することで、Unityの配列やUI、衝突判定の基礎を一度に学ぶことができます。

また、初心者の方でも安心して取り組めるように、操作手順を丁寧に説明します。わからないことがあれば、記事の最後の「よくある質問(Q&A)」をご覧ください。

この記事を通じて、Unityでの開発スキルをさらに一歩進めていきましょう!


Unityを触ったことがないという方はコチラの記事から見てみてください!



2. シーンのセットアップ

このステップでは、Unityシーンに必要なオブジェクトを作成し、動作に必要な設定を行います。Cubeを動かして他のオブジェクトに触れたときに名前を記録できるようにする準備を進めましょう。


1. Cubeの作成と設定

  1. Cubeをシーンに追加
    • Hierarchyウィンドウで右クリックし、「3D Object」→「Cube」を選択します。
    • シーンにCubeが追加されます。
  2. Rigidbodyコンポーネントの追加
    • Cubeを選択した状態で、Inspectorウィンドウの「Add Component」ボタンをクリックします。
    • 検索バーに「Rigidbody」と入力し、Rigidbodyコンポーネントを追加します。
    • Rigidbodyの「Use Gravity」のチェックを外してください。これにより、Cubeが重力の影響を受けず、動かしやすくなります。
  3. Cubeの見た目をカスタマイズ
    • Projectウィンドウで右クリックし、「Create」→「Material」を選択して新しいマテリアルを作成します。
    • マテリアルの名前を「CubeMaterial」に変更します。
    • Inspectorで「Albedo」の色を選択して、好きなカラーを設定します。
    • 作成したマテリアルをCubeにドラッグ&ドロップして適用してください。

2. 他の3Dオブジェクトの作成

  1. Sphere、Cylinder、Capsuleを追加
    • Hierarchyウィンドウで右クリックし、「3D Object」から以下のオブジェクトを順に選択して追加します。
      • Sphere
      • Cylinder
      • Capsule
  2. Tagの設定
    • それぞれのオブジェクトを選択し、Inspectorウィンドウで「Tag」を「Target」に設定します。
    • 「Target」タグがない場合は、以下の手順で新しいタグを作成してください。
      1. Inspectorウィンドウで「Tag」のドロップダウンメニューを開き、「Add Tag…」を選択。
      2. Tags」セクションの「+」ボタンをクリックし、新しいタグとして「Target」を作成。
      3. 作成したタグをそれぞれのオブジェクトに適用します。
  3. Colliderの設定
    • Sphere、Cylinder、CapsuleそれぞれのColliderの「Is Trigger」にチェックを入れます。
    • これにより、オブジェクトが触れたことを検知できるようになります。

3. オブジェクトの配置

  • X座標とZ座標を調整して、Cubeと他のオブジェクト(Sphere、Cylinder、Capsule)が適度に離れるように配置します。
  • 例えば、以下のように設定するとよいでしょう。
    • Cube: (0, 0, 0)
    • Sphere: (3, 0, 0)
    • Cylinder: (-3, 0, 0)
    • Capsule: (0, 0, 3)

これでシーンのセットアップは完了です!次のステップでは、UIを作成して画面上にオブジェクト名を表示する準備を行います。



3. UIの作成

Unityで触れたオブジェクトの名前を画面に表示するには、UIのテキストを活用します。このステップでは、3つのテキストオブジェクトを作成し、それぞれに適切な名前を付けて配置する方法を解説します。


1. テキストオブジェクトの作成

  1. Hierarchyウィンドウで右クリックし、「UI」→「Text (Legacy)」を選択します。
    • これにより、シーンに1つのテキストオブジェクトが追加されます。
  2. 同じ手順で3つのテキストオブジェクトを作成します。
  3. 作成したテキストオブジェクトをそれぞれ「Text0」「Text1」「Text2」に名前を変更します。
    • 名前の変更は、Hierarchyウィンドウでオブジェクトを選択し、F2キーを押すか、名前をダブルクリックすることで行えます。

2. テキストの位置とスタイルの調整

  1. 各テキストオブジェクトを選択し、Rect Transformコンポーネントで以下の設定を行います:
    • 位置: テキストが横に並ぶようにX座標を調整します。
      • 例: Text0 → X座標 -150, Text1 → X座標 0, Text2 → X座標 150。
    • サイズ: テキストが画面内で見やすくなるように幅と高さを調整します。
      • 例: Width 200, Height 50。
  2. Inspectorウィンドウの「Text」コンポーネントで以下の設定を行います:
    • フォントサイズ: 大きめの値(例: 24)に設定します。
    • : 任意の色に設定します(例えば、白や黒など)。
    • Alignment(整列): 「Center」に設定してテキストが中央揃えになるようにします。

3. 初期状態の設定

  1. 各テキストオブジェクトの「Text」フィールド(初期文字列)に設定されている「New Text」を削除して空白にします。
    • これにより、ゲーム開始時には何も表示されなくなります。

このステップを完了すると、3つのテキストオブジェクトが画面上に横一列に配置されます。これらのテキストは、スクリプトで更新され、触れたオブジェクトの名前が順番に表示されます。

次のステップでは、スクリプトを作成してこれらのUIに値を反映させる方法を説明します!



4. スクリプトの作成と設定

ここでは、触れたオブジェクトを配列に記録し、それを画面に表示するスクリプトを作成して設定する手順を解説します。以下のステップに沿って進めましょう!

スクリプトを作成する

  1. スクリプトの新規作成
    • Projectウィンドウを右クリックして、「Create」→「C# Script」を選択します。
    • 新しいスクリプトに「CubeMove」と名前を付けます。
  2. スクリプトを開く
    • 「CubeMove」スクリプトをダブルクリックして開きます。
    • 次に、以下のコードを記述します。

CubeMoveスクリプトのコード

以下のコードをそのままコピーしてスクリプトに貼り付けてください。

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

public class CubeMove : MonoBehaviour
{
    public string[] myArray = new string[3];
    private int count;
    public Text arrayText0;
    public Text arrayText1;
    public Text arrayText2;

    void Start()
    {
        count = 0;
    }

    void Update()
    {
        float dx = Input.GetAxis("Horizontal") * Time.deltaTime * 3.0f;
        float dz = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f;
        transform.position = new Vector3
        (
            transform.position.x + dx, 0, transform.position.z + dz
        );
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "Target" )
        {
            if(count == 2)
            {
                myArray[2] = other.gameObject.name;
                arrayText2.text = "3: " + myArray[2];
                other.gameObject.SetActive(false);
                count++;
            }
            else if(count == 1)
            {
                myArray[1] = other.gameObject.name;
                arrayText1.text = "2: " + myArray[1];
                other.gameObject.SetActive(false);
                count++;
            }
            else if(count == 0)
            {
                myArray[0] = other.gameObject.name;
                arrayText0.text = "1: " + myArray[0];
                other.gameObject.SetActive(false);
                count++;
            }
        }
    }
}

スクリプトを設定する

  1. Cubeにスクリプトをアタッチする
    • HierarchyウィンドウでCubeを選択します。
    • 「CubeMove」スクリプトをCubeにドラッグ&ドロップしてアタッチします。
  2. UIオブジェクトをスクリプトに紐付ける
    • Cubeを選択した状態で、Inspectorビューを開きます。
    • 「Array Text0」「Array Text1」「Array Text2」というフィールドが表示されます。
    • 各フィールドに、Hierarchyで作成した「Text0」「Text1」「Text2」をそれぞれドラッグして設定します。

これでスクリプトの設定は完了です!このスクリプトは、Cubeが「Target」タグを持つオブジェクトに触れるたびに、その名前を配列に記録し、画面上のテキストに表示します。

次のステップでは、ゲームを実行して動作を確認しましょう!



5.実行と確認

ここまでの準備が整ったら、いよいよゲームを実行して動作を確認してみましょう!以下の手順で、Cubeを操作し、触れたオブジェクトの名前が画面に表示されることを確認します。


1. ゲームを実行する

Unityエディターの上部にある 「Play」ボタン をクリックします。これでゲームが開始します。


2. Cubeを操作する

キーボードの矢印キーまたは「WASD」キーを使って、Cubeを動かしてください。

  • 矢印キー(↑、↓、←、→)または W(前進)、A(左)、S(後退)、D(右) を押すことで、Cubeを前後左右に移動させることができます。

3. オブジェクトに触れる

Cubeを操作して、Sphere、Cylinder、Capsuleなどのオブジェクトに近づき、触れてみましょう。

  • Cubeがオブジェクトに接触すると、そのオブジェクトの名前 が画面のテキストに表示されます。
  • 表示されるテキストの例:
    • 「1: Sphere」
    • 「2: Cylinder」
    • 「3: Capsule」

触れたオブジェクトは非表示(inactive)になるので、視覚的にどのオブジェクトを触れたか確認しやすくなります。


4. 動作を確認するポイント

  • オブジェクトに触れた順番に名前が「Text0」「Text1」「Text2」の順で表示されているか確認してください。
  • テキストが正しく表示されない場合は、スクリプトの設定や「Text」オブジェクトのアタッチが正しいかを再確認しましょう。

5. ゲームを終了する

確認が終わったら、再び 「Play」ボタン を押してゲームを停止します。


これで、触れたオブジェクトの名前を配列に記録し、画面に表示する方法の動作確認が完了です!無事動作したらおめでとうございます!さらに複雑な挙動を追加したり、表示をカスタマイズしてみたりするのも楽しいですよ。



6. まとめ

この記事では、Unityを使ってオブジェクトに触れた際にその名前を配列に記録し、画面に表示する方法を学びました。以下の手順を通じて、Unityの基本操作とスクリプトを活用するスキルを磨くことができましたね!

  1. シーンのセットアップ
    Cubeや他の3Dオブジェクトを作成し、物理挙動やタグを設定することで、オブジェクト同士の接触を検知する基盤を作成しました。
  2. UIの作成
    テキストを使って、配列の内容をリアルタイムで表示する仕組みを導入しました。これにより、ゲーム中のフィードバックを視覚的に提供する方法を学びました。
  3. スクリプトの作成と実装
    配列を用いてオブジェクトを記録し、それをUIに反映するスクリプトの基本的な書き方を解説しました。実際に動くコードを記述し、UnityでのC#プログラミングの理解を深めることができました。

このような機能は、ゲーム開発において重要な役割を果たします。例えば、プレイヤーが特定のアイテムを収集したり、チェックポイントを通過したりする状況で応用できます。また、UIを使ったフィードバックの提供は、プレイヤー体験を向上させるために欠かせない要素です。

ぜひ今回学んだ内容を応用して、オリジナルのゲームやアプリケーションを作成してみてください!新しいアイデアや工夫を加えれば、さらに面白いプロジェクトが生まれることでしょう。



よくある質問(FAQ)

Q
Cubeが動かない場合、どうすればいいですか?
A

Cubeが動かない場合、以下の点を確認してください:

  • スクリプトがCubeにアタッチされているか確認してください。
  • スクリプト内でInput.GetAxis("Horizontal")Input.GetAxis("Vertical")を使用しています。この機能が有効であることを確認するために、Unityの「Edit」→「Project Settings」→「Input Manager」で「Horizontal」と「Vertical」が設定されていることを確認してください。
  • Rigidbodyの「Use Gravity」のチェックが外れているか確認してください。Gravityが有効だと、Cubeが落下して動かせなくなることがあります。
Q
UIのテキストが表示されない場合はどうすればいいですか?
A

以下の点を確認してください:

  • UIの「Text」オブジェクトがCanvas内に存在しているか確認してください。Canvasがない場合は、Hierarchyで右クリックして「UI」→「Canvas」を追加してください。
  • スクリプト内でarrayText0arrayText1arrayText2に正しいTextオブジェクトが割り当てられているか確認してください。割り当て忘れが原因でテキストが更新されないことがあります。
  • テキストのカラーが背景と同じ色になっていないか確認してください。視認性のある色を選んでください。
Q
「Target」タグが機能しない場合、何を確認すればいいですか?
A

タグが機能しない場合、以下を確認してください:

  • 各オブジェクトに正しく「Target」タグが設定されているか確認してください。「Inspector」ビューでタグが設定されていることを確認します。
  • 「Target」タグが存在しない場合は、Hierarchyの「Add Tag」で新しいタグを作成し、オブジェクトに適用してください。
  • Colliderの「Is Trigger」が有効になっているか確認してください。これが無効だと、OnTriggerEnterが呼び出されません。

おすすめのアセット

「SLATE Cinematic Sequencer」は、Unityでのシネマティックシーンやカットシーンの作成を簡単にする強力なツールです。このアセットを使用すると、複雑な演出やカメラワークを直感的に設定でき、プロジェクトのクオリティを向上させます。

主な特徴:

  • 直感的なタイムライン編集: ドラッグ&ドロップでシーンの流れを簡単に構築できます。
  • 多彩なトラックとクリップ: アニメーション、オーディオ、カメラなど、さまざまな要素を統合可能です。
  • リアルタイムプレビュー: 編集内容を即座に確認し、効率的な作業が可能です。

おすすめポイント:

  • 初心者にも優しい設計: 複雑なスクリプトなしで、シネマティックな演出を実現できます。
  • 高い互換性: Unityのビルトイン、URP、HDRPなど、主要なレンダーパイプラインと互換性があります。
  • 豊富なカスタマイズオプション: シーンの細部まで調整し、独自の演出を作成できます。