【3D】2Dオブジェクトをボタンにする【Unity6】

unity技術

3D空間に配置した2Dオブジェクトを「ボタン化」します。
オブジェクトをクリックしたら、別オブジェクトが表示・非表示されるようにしてみます。

簡易版

  • カメラ設定 「Main Camera」に「Physics 2D Raycaster」追加。
  • イベントシステム 「Hierarchy」に「Event System」を作成。
  • C#スクリプト作成 オブジェクトにアタッチ。
    オブジェクト変数指定。
  • イベントトリガー オブジェクトに「Event Trigger」追加。
    イベントタイプ「PointerClick」追加。
    オブジェクトと関数指定。
  • コライダー設定 オブジェクトに「Box Collider 2D」追加。

目標動作サンプル

board_info_yu(ボード内の紙)」をクリックしたら「Plane(拡大された紙)」を表示・非表示に。

以下の項目設定は、順番通りでなくても大丈夫です。
それぞれ設定していきましょう。

カメラの設定

カメラに、イベントを検知するためのシステム「Physics 2D Raycaster」を設定します。

今回の指定オブジェクトが2Dスプライトのため2D用の「Physics 2D Raycaster」を選択していますが、指定オブジェクトが3Dモデルの場合は3D用の「Physics Raycaster」を選択する必要があります。

逆に言うと3Dテンプレート内であっても2Dオブジェクトには2D用の設定を選ばないといけないということみたいです。

ゲームカメラであるオブジェクト「Main Camera」にコンポーネントを追加します。
Main Camera」を選択し、インスペクターの「Add Component」ボタンを押します。

タブで「Event」>「Physics 2D Raycaster」を選択します。

コンポーネントに「Physics 2D Raycaster」が追加されます。

カメラの設定は以上です。

Event System を作成

イベント検知のためのシステム「Event System」を追加します。

Hierarchy」ウィンドウの空いてる個所を右クリックしてメニューを開きます。
メニューの中から「UI」>「Event System」を選択します。

Hierarchy」内に「EventSystem」が追加されます。

「EventSystem」設置は以上です。

スクリプトをアタッチ

表示・非表示させるためのスクリプトを記述します。

Assets」フォルダ内に新規スクリプトを作成します。
名前は任意です。今回は「click」としました。

スクリプトの中身です。
クラス名はファイル名と同じにしましょう。
関数名は任意です。今回は「ClickEVENT」としました。

using UnityEngine;
using UnityEngine.EventSystems;

public class click : MonoBehaviour
{
// ここでPlaneのゲームオブジェクトを参照します
public GameObject plane;

// クリックイベントを処理する関数
public void ClickEVENT()
{
if (plane != null)
{
// Planeのアクティブ状態をトグルします
plane.SetActive(!plane.activeSelf);
}
}

}

作成した「click」スクリプトをオブジェクト「board_info_yu(ボード内の紙)」にアタッチします。

board_info_yu(ボード内の紙)」のインスペクターにスクリプトが追加されます。

そのままスクリプトコンポーネント内のパブリック変数部分に表示非表示するオブジェクト「Plane(拡大された紙)」をドラッグして登録します。

スクリプト作業は以上です。

イベントトリガーを設定

オブジェクト「board_info_yu(ボード内の紙)」に「Event Trigger」コンポーネントを追加します。
ボタンのような機能を追加するためのシステムです。

オブジェクト「board_info_yu(ボード内の紙)」を選択し、インスペクターの「Add Component」ボタンを押します。

タブで「Event」>「Event Trigger」を選択します。

コンポーネントに「Event Trigger」が追加されます。

そのまま「Add New Event Type」ボタンを押します。

タブの中にあるトリガーイベントの「PointerClic」(今回はクリックでのトリガーとなるため)を選択します。
その後、オブジェクトと関数を登録します。

オブジェクト部分に「board_info_yu(ボード内の紙)」をドラッグして登録します。

No Function(関数)」タブで「click」>「ClickEVENT」を選択して登録します。
作成したスクリプト「click」スクリプト内に記述した「ClickEVENT」関数を指定する形になっています。

イベントトリガー設定は以上になります。

コライダー(衝突判定)設定

オブジェクト「board_info_yu(ボード内の紙)」に「Physics 2D」コンポーネントを追加します。
オブジェクトに2D用のコライダー(衝突判定)を設定します。

オブジェクト「board_info_yu(ボード内の紙)」を選択し、インスペクターの「Add Component」ボタンを押します。

タブで「Physics 2D」>「Box Collider 2D」を選択します。
今回は「Box Collider 2D」を選択しましたが、指定オブジェクトの形によって任意のコライダーを選択可能です。

コライダー(衝突判定)設定は以上です。

テストプレイ

Game(ゲーム画面のほう)」にて、オブジェクト「board_info_yu(ボード内の紙)」をクリックして動作を確認しましょう。

コメント