Unity イベントシステムの基礎を学ぶ

本記事では、Unityを使用したインタラクションの実装に関する基礎知識を学びます。初めに、Unityイベントシステムを通じてのインタラクション実装の基本、次に、STYLYインタラクションSDKを利用したインタラクションの作成方法について学びます。この記事を通じて、画面タップなどの基本的なインタラクティブ機能の実装から、STYLYインタラクションSDKを使用した高度なインタラクティブコンテンツの制作までのスキルを習得することができます。

Unityイベントシステムを使ったインタラクションの実装

Unityイベントシステム概要

システムから見た時に、ユーザーが何かしらの操作をデバイスに行うことをユーザー入力と言います。

例えば、マウスのボタンをクリックする、スマホの画面をタップする、VRコントローラのボタンをクリックするなどがあります。

Image26

ユーザー入力があった際に、Unityではゲームオブジェクト間でEvent(イベント)という形で扱うことができます。

イベントシステムとは、このイベントを扱うUnityの仕組み全体のことです。

また、イベントシステムを実現するために必須なコンポーネントの名前にもなっています。

Unityイベントシステムを使ってインタラクションを実装する

Unityのコンポーネントの一つであるイベントトリガー(EventTrigger)を使って、イベントシステムを作ってみましょう。

STYLYモバイルアプリ上で画面タップ操作でインタラクションを発生させるイベントを作ることを想定しています。

イベントトリガーは、Unityのコンポーネントの一つです、イベントシステムからイベントを受け取り、各イベントに登録された機能を呼び出すことができます。

イベントシステムを使用したインタラクションを作成する流れは以下の通りです。

①イベントシステムの準備

  • シーンにEvent Systemオブジェクトを追加
  • Main CameraにPhysics Raycasterコンポーネントを追加

②ユーザー入力を受け取りたいゲームオブジェクトにEvent Triggerコンポーネントを追加
③Event Typeを追加
④Eventを処理するゲームオブジェクトとその機能を登録

今回は「CubeをタップしたらSphereが出現する」という簡単なインタラクションを作成したいと思います。

インタラクションするゲームオブジェクトの関係は以下のようになります。

ユーザー入力を受け取るゲームオブジェクト:Cube
Eventを処理するゲームオブジェクト:Sphere
処理する機能:自分(Sphere)が出現する(=自分をActiveにする)

イベントシステムの準備

イベントシステムを使ったインタラクションを作ってみましょう。

シーンにCubeとSphereを配置し、Sphereは非Activeの状態にしておきます。

ARで現実に出した時のことを考慮してCube、SphereともにScaleのx,y,zをそれぞれ0.1(10cm)、SphereのPositionのyを0.2にしておきます。

Cubeの設定
・ScaleのX、Y、Zすべてを0.1

Image11

Sphereの設定
・ScaleのX、Y、Zすべてを0.1
・PositionのYは0.2

・非Activeの状態にする(ゲームオブジェクトの名前の横にあるチェックボックスのチェックを外してください

Image14

ヒエラルキー上で右クリック > UI > Event Sysyemを選択して、シーンにEvent Systemオブジェクトを配置してください。

Image29

Main CameraにPhysics Raycasterコンポーネントを追加してください。

Image24

ユーザー入力を受け取りたいオブジェクトにEvent Triggerを追加する

CubeにEvent Triggerコンポーネントを追加してください。

Event Typeの追加

CubeのEvent Triggerコンポーネントの中にあるAdd New Event Typeボタンを押して、Event Typeを追加してください。

追加するEvent TypeはPointer Downを選択してください。

Image1

Event Typeとは、Unityで定義されてあるEventの種類のことです。

Pointer Downは、以下の操作(ユーザー入力)に対応します。

・マウスの場合:マウスボタンを押し下げた時(ボタンを離した時はPointer Up)
・スマホ画面の場合:画面をタップした時

Image21

Eventを処理するゲームオブジェクトと機能を登録

Event Typeを追加した直後はList is Emptyと表示されます。

このEvent Typeのエリアの右下の[+]ボタンを押し、このEventで処理する機能を登録していきます。

[+]ボタンを押すと下図のようになります。

Image4

None (Object) 箇所にEventを処理するゲームオブジェクトSphereを設定します。

ヒエラルキーのSphereをNone (Object) 箇所にドラッグ&ドロップしてください。

Image7

No Function箇所のプルダウンを押すとSphereが持っている機能が選択できますので、GameObjectのカテゴリにあるSetActive (bool)を選択して設定してください。

Image20

すると、チェックボックスが現れます。

チェックボックスの意味は、下記のようになります。

  • チェックボックスがOFF:設定したゲームオブジェクト(Sphere)を非Activeにする
  • チェックボックスがON:設定したゲームオブジェクト(Sphere)をActiveにする

ここではSphereをActiveにして出現させたいので、チェックボックスをONにします。

Image16

これで処理したい機能を登録できました。

インタラクションの動作を確認する

作成したインタラクションの動作を確認していきます。

今回、スマホのSTYLYアプリでのタップ操作を想定していますが、STYLYにアップロードして確認する前にUnity上でシーンを再生し、動作を確認します。

動作確認の手順は以下の通りです。

①シーンを再生する(再生モードにする)
②ゲームビュー上で目的のゲームオブジェクトに対して操作する

ゲームビューを見るとCubeが小さいので、

MainCameraのPositionを (x, y, z) = (0, 0, −0.5)くらいにして近づけましょう。

Image2

シーンを再生してください。

再生されたらゲームビューでCubeをクリックしてください。

想定通り動きましたでしょうか?

Image5

ちなみに、1つのEventに対して複数の機能を登録することができます。

STYLYにイベントシステムをアップロードするための注意点

STYLYでイベントシステムを動かすには、EventSystemオブジェクトもアップロードする必要があります。

Physics RaycasterはSTYLY側のMainCameraに組み込まれているので、MainCameraのアップロードの必要はありません。

プレハブ化する際は、EventSystemオブジェクトも一緒にプレハブに含めましょう。

つまり、以下のゲームオブジェクトをまとめてプレハブ化する必要があります。

  • EventSystemオブジェクト
  • Eventを受け取りたいゲームオブジェクト(Event Triggerコンポーネントを追加したゲームオブジェクト)
  • Event Triggerによって呼び出される機能を持っているゲームオブジェクト

今回はEmptyオブジェクトをヒエラルキーに配置して、オブジェクト名をEventに変更しました。

Eventオブジェクト配下にEventSystem、Cube(Eventを受け取りたいゲームオブジェクト)、Sphere(Event Triggerによって呼び出される機能を持っているゲームオブジェクト)を配置してください。

Image22

STYLYにイベントシステムをアップロードする

Eventオブジェクトをプレハブ化してください。

Image33

STYLYにプレハブをアップロードしてください。

STYLY Studioにアップロードしたプレハブ(Event)を配置してください。

STYLY Studio上ではPointer Downは機能しないため、クリックしても動きません。

Image8

シーンを公開して、モバイルアプリで動作を確認してみましょう。

CubeをタップしてSphereが表示されたら成功です。

Image9

STYLYインタラクションSDKを使ったインタラクションの実装

STYLYインタラクションSDK概要

STYLY作品にユーザーインタラクションを簡単に実装できるように提供している一連のシステムです。

主要なインタラクションに対応したコンポーネントとして提供されています。

提供するコンポーネントには、「オブジェクトをドラッグできる」などの属性を与えるものと、「オブジェクトを生成する」などのアクションを与えるものがあります。

STYLYインタラクションSDKはVR HMD用のSTYLYアプリ向けに想定して開発されましたが、基本的にはSTYLYモバイルアプリ上でも動作します。

オブジェクトをドラッグするインタラクションを実装する

UnityプロジェクトにSTYLY インタラクションSDKをインポートしてください。

オブジェクトをドラッグできるようになるSTYLY_Attr_Draggableを使ってみましょう。

ゲームオブジェクトにSTYLY_Attr_DraggableコンポーネントをAdd Componentするだけでそのゲームオブジェクトをドラッグできるようになります。

ヒエラルキーにCubeを配置して、CubeにSTYLY_Attr_Draggableコンポーネントを追加してください。

Image12

作成したインタラクションの動作確認をしましょう。

シーンを再生してください。

インタラクションSDKのコンポーネントが追加されているゲームオブジェクトがヒエラルキーにある場合、再生時に自動的にSTYLY_Simulatorが配置され、ゲームビューでSTYLYシミュレーターが動作します。

GameビューでキーボードのWASDを使ってシーン内を移動することができます。

Image6

WASDキーを使って、CUBEに近づいてからCubeをドラックしてみてください。

タップするとオブジェクトが生成するインタラクションを実装する

STYLYインタラクションSDKのアクション系コンポーネントと、Unityのイベントシステムとを組み合わせてタップするとオブジェクトが生成するインタラクションを実装してみましょう。

今回はSTYLY_Action_Spawnerを使います、STYLY_Action_Spawnerは、プレハブ(またはゲームオブジェクト)を元にゲームオブジェクトを生成する機能を与えるコンポーネントです。

これを使って、CubeをタップしたらSphereが生成されるという簡単なインタラクションを作成したいと思います。

インタラクションするゲームオブジェクトの関係は以下のようになります。

①ユーザー入力を受け取りたいゲームオブジェクト:Cube
②Eventを処理するゲームオブジェクト:Cube
③処理する機能:Sphereを生成する(=CubeのSpawnを実行する)

準備

シーンにCubeとSphereを配置し、Sphereは非Activeの状態にしておきます。

ARで現実に出した時のことを考慮してCube、SphereともにScaleのx,y,zをそれぞれ0.1(10cm)にしておきます。

Cubeの設定
・ScaleのX、Y、Zすべてを0.1

Image11

Sphereの設定
・ScaleのX、Y、Zすべてを0.1

・非Activeの状態にする(ゲームオブジェクトの名前の横にあるチェックボックスのチェックを外してください

Image32

ユーザー入力を受け取りたいゲームオブジェクトにEvent Triggerコンポーネントを追加

CubeのAdd Componentボタンをクリックして、Event Triggerコンポーネントを追加してください。

Image17

さらに、今回はCubeにSTYLY_Action_Spawnerコンポーネントも追加してください。

Image13

Event Typeの追加

CubeのEvent Triggerコンポーネントの中にあるAdd New Event Typeボタンを押して、Event Typeを追加してください。

追加するEvent TypeはPointer Downを選択してください。

Image27

Eventを処理するゲームオブジェクトとその機能を登録

Eventを処理するゲームオブジェクトはCubeなので、自分自身を設定します。

Event Typeのエリアの右下の[+]ボタンを押し、

機能は、2.で追加した「STYLY_Action_Spawner」コンポーネントの「Spawn」を選択します。

Image25

インタラクションSDKコンポーネントの設定

Cubeに追加したSTYLY_Action_Spawnerコンポーネントの設定をします。

Prefabに生成したいプレファブ、もしくはシーン上のゲームオブジェクトを設定します。

今回はシーン上に配置したSphereを設定します。

Image18

Spawn Positionは生成される位置座標を設定しますが、Cubeからの相対座標で設定します。

適当な値で構いませんが、ここではx=-0.2とし、他は0のままとしました。

Image3

インタラクションの動作を確認する

作成したインタラクションの動作確認をしましょう。

シーンを再生してください。

WASDキーを使って、CUBEに近づいてからCubeをクリックしてください。

想定通り動きましたでしょうか?

STYLYにアップロードする

STYLYにアップロードするために、CubeとSphereを1つのゲームオブジェクトにまとめてください。

今回はEmptyオブジェクトをヒエラルキーに配置して、オブジェクト名をEventSDKに変更しました。

EventSDKオブジェクト配下にCube(Eventを受け取りたいゲームオブジェクト)、Sphere(STYLY_Action_Spanwer)によって呼び出される機能を持っているゲームオブジェクト)を配置してください。

Image23

EventSDKオブジェクトをプレハブ化してください。

Image10

STYLYにプレハブをアップロードしてください。

STYLY Studioにアップロードしたプレハブ(EventSDK)を配置してください。

Image19

シーンを公開して、モバイルアプリで動作を確認してみましょう。

CubeをタップしてSphereが表示されたら成功です。

Image31