UnityUnityメモ

Unityで学ぶ:衝突イベントでスプライト名を取得する方法

Unity

はじめに

Unityを使って、オブジェクト同士がぶつかったときにスプライト名をコンソールに表示させる方法を解説します。今回は、「みかん(画像A)」が「すいか(画像B)」にぶつかると、そのスプライト名が表示される仕組みを作ります。

この記事を読むと、以下のことができるようになります:

  • スプライトのインポートと配置
  • 2Dコライダーとリジッドボディの設定
  • スクリプトでスプライトレンダラーを取得して、スプライト名を表示する

初心者にもわかりやすく解説するので、安心してくださいね!




ステップ1: スプライト画像をインポートして配置する

1. Unityに画像をインポートする

まず、用意した2つのPNG画像(みかんとすいか)をUnityにインポートします。

  1. UnityのプロジェクトウィンドウにPNGファイルをドラッグ&ドロップします。
  2. インポートした画像を選択し、インスペクターで TextureTypeSprite(2D and UI) に設定して「Apply」ボタンを押します。

2. 画像をヒエラルキーに配置する

  1. ヒエラルキー(Hierarchy)ウィンドウに、インポートした画像をドラッグ&ドロップします。
    • みかん(画像A)
    • すいか(画像B)
  2. 配置したオブジェクトの名前をそれぞれ「Mikan」「Suika」に変更しましょう。



ステップ2: 2Dコライダーとリジッドボディを設定する

1. 2Dコライダーを追加する

オブジェクトにコライダーを追加することで、衝突判定を行います。

  1. 「Mikan」と「Suika」をそれぞれクリックします。
  2. インスペクター(Inspector)ウィンドウで「Add Component」をクリック。
  3. 「Box Collider 2D」または「Circle Collider 2D」を選択して追加します。

2. リジッドボディを追加する(みかん側のみ)

「Mikan」に物理挙動を追加します。

  1. 「Mikan」を選択します。
  2. 「Add Component」をクリックして、「Rigidbody 2D」を追加します。
  3. Rigidbody 2Dの設定で「Gravity Scale」を1にします。



ステップ3: スクリプトを作成してアタッチする

1. スクリプトを作成する

  1. プロジェクトウィンドウで右クリック。
  2. 「Create」→「C# Script」を選びます。
  3. スクリプト名を「DeleteSprite」とします。

2. スクリプトを記述する

作成したスクリプトをダブルクリックして開き、以下のコードを入力します:

① 必要なライブラリの導入

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
  • using System.Collections;using System.Collections.Generic;
    • C#の基本的な機能や、リストやコレクションを使うために必要なものです。
    • 今回はあまり関係ないけど、Unityでコードを書くときにはよく出てきます。
  • using UnityEngine;
    • Unityのゲーム作りで使うライブラリを読み込むために必要です。
    • これを入れることで、GameObjectSpriteRendererなどUnity独自のものを使えるようになります。

② クラスの宣言と変数の準備

public class DeleteSprite : MonoBehaviour
{
public SpriteRenderer ballSprite;
  • public class DeleteSprite : MonoBehaviour
    • このスクリプトのクラス名はDeleteSpriteです。
    • **MonoBehaviour**はUnityの基本的な部品(コンポーネント)を使うための親クラスだと思ってください。
  • public SpriteRenderer ballSprite;
    • **SpriteRenderer**はオブジェクトの「見た目(スプライト)」を扱うクラスです。
    • ここで宣言しておくことで、ぶつかった相手のスプライトをあとで入れることができます。

③ コリジョン(衝突)の処理

void OnCollisionEnter2D(Collision2D collision)
{
ballSprite = collision.gameObject.GetComponent<SpriteRenderer>();
Debug.Log(ballSprite.sprite.name);
}
  • void OnCollisionEnter2D(Collision2D collision)
    • **「2Dオブジェクトが何かにぶつかった瞬間」**に呼び出される関数です。
    • 引数のcollisionには「ぶつかった相手」の情報が入っています。
  • collision.gameObject.GetComponent<SpriteRenderer>();
    • **collision.gameObject**は「ぶつかった相手のオブジェクト」を指します。
    • **GetComponent<SpriteRenderer>()**を使って、そのオブジェクトの中にあるSpriteRenderer(スプライトを管理するコンポーネント)を探して、変数ballSpriteに入れています。
  • Debug.Log(ballSprite.sprite.name);
    • 見つけたスプライトの名前をコンソールに表示します。
    • **ballSprite.sprite.name**で、スプライトの名前を取得できます。

全体の動き

  1. ゲーム中に2Dオブジェクトが何かにぶつかると、OnCollisionEnter2Dが呼び出されます。
  2. ぶつかった相手の中からSpriteRendererを探して、そのスプライト情報を取得します。
  3. 取得したスプライトの名前をコンソールに表示します。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// DeleteSprite クラスを作成
public class DeleteSprite : MonoBehaviour
{
    // SpriteRenderer 型の変数を宣言します。
    public SpriteRenderer ballSprite;

    void OnCollisionEnter2D(Collision2D collision)
    {
        // 衝突したオブジェクトから SpriteRenderer コンポーネントを取得します。
        ballSprite = collision.gameObject.GetComponent<SpriteRenderer>();

        // その名前(sprite.name)をデバッグログに出力します。
        Debug.Log(ballSprite.sprite.name);
    }
}

3. スクリプトを「Mikan」にアタッチする

  1. 「Mikan」をヒエラルキーで選択。
  2. 作成した「DeleteSprite.cs」をドラッグして、「Mikan」にドロップします。



ステップ4: ゲームをプレイして確認する

  1. Unityエディターで「Play」ボタンをクリック。
  2. みかんが落ちてすいかにぶつかると、コンソールウィンドウにすいかのスプライト名が表示されます。



まとめ

今回は、Unityでオブジェクトがぶつかったときにスプライト名をコンソールに表示する方法を解説しました。スプライト画像のインポートから、コライダーやリジッドボディの設定、スクリプトの記述まで、Unity初心者でも簡単に挑戦できる内容だったと思います。ゲーム制作の第一歩として、こうした小さな仕組みを作れるようになると、どんどん自信がついてきますよ!

「もっと本格的にゲーム制作を学びたい」「自分のスキルをさらに伸ばしたい」と思った方は、バンタンゲームアカデミーの資料をチェックしてみてはいかがでしょうか?プロから学べる環境や実践的なカリキュラムが揃っていて、ゲーム制作の夢を叶えるための第一歩を踏み出せます!

ぜひ、自分の可能性を広げる一歩として、(無料で資料請求)をしてみてくださいね。



よくある質問

Q
コライダーを追加したのに衝突しません
A

コライダーの形状がオブジェクトと合っていない可能性があります。インスペクターでコライダーの形状を確認し、必要に応じて調整してください。

Q
コンソールにエラーが表示されます
A

スクリプト内のコードに誤りがある可能性があります。特に「collision.gameObject.GetComponent<SpriteRenderer>()」の部分を確認してください。

Q
スプライト名が表示されません
A

オブジェクトに「Sprite Renderer」がアタッチされているか確認してください。また、アタッチしたスクリプトが正しいオブジェクトに配置されているかも確認しましょう。