オブジェクトをクリックしたら、アクションを起こす(イベントを使う)
Unityでイベントを使い、Cubeをクリックしたら前に進むサンプルを作成します。
目次
実行結果
まずは実行した様子を見てみましょう
Cubeをクリックすると前方(Z軸方向)へ進みます
シーン作成
Mainカメラからイベントを取得できるようにする
MainカメラにPhysicsRaycasterコンポーネントを追加します。
イベントシステムを追加
ヒエラルキーにイベントシステムを追加して、イベントを受け取れるようにします
スクリプトを作成
クリックイベントを受け取れるようにスクリプトを作成します
using UnityEngine;
using UnityEngine.EventSystems;
// Rigidbodyコンポーネントがアタッチされていなければアタッチします
[RequireComponent(typeof(Rigidbody))]
// インターフェースを実装します
public class CubeControlEvent : MonoBehaviour, IPointerClickHandler
{
Rigidbody rigidBody;
// インスペクタで調整が可能になります
public Vector3 force = new Vector3(0, 0, 10);
void Start()
{
rigidBody = GetComponent<Rigidbody>();
}
// ここに、クリックした時に実行したいコードを記述します。
public void OnPointerClick(PointerEventData eventData)
{
Debug.Log("クリックイベントが発生");
// 瞬発的に力を加えます(オブジェクトの質量の無視の設定です)
rigidBody.AddForce(force, ForceMode.VelocityChange);
}
}
OnPointerClickイベントで、クリックされた時の処理をします
引数でPointerEventData型を取得できます。クラスのプロパティ一覧を下の参考のところに載せておきます
public void OnPointerClick(PointerEventData eventData)
Cubeにアタッチします
Rigidbodyコンポーネントが自動的にAddComponentされます
Cubeが落下してしまいますので、UseGravityはオフにしておきます
Cubeのタグを変更します
もし、タグがPlayerならば・・・と条件をつけています
条件はそのほかでも構いません(名前が〇〇ならばとか、宣言しているLife値が〇〇ならばとか)
完成!
実行してみましょう
イベント駆動(イベントドリブン)型のアプリは多く存在します
たくさんのサンプルに触れて、自分でも活用できるようにしておきましょう
他のアクション(マウスが物体の上に乗った時、マウスが物体から離れた時)
// IPointerExitHandlerインターフェースを実装(classに:をつけて追記)します。
public class CubeControlEvent : MonoBehaviour, IPointerClickHandler, IPointerExitHandler, IPointerEnterHandler
{
// マウスがCubeから離れた場合
public void OnPointerExit(PointerEventData eventData)
{
Debug.Log("マウスが離れました");
}
// マウスがCubeに乗った場合
// IPointerEnterHandlerインターフェースを実装(classに:をつけて追記)します。
public void OnPointerEnter(PointerEventData eventData)
{
Debug.Log("マウスが乗っています");
}
}
参考
PointerEventData型
button | このイベントで使用する InputButton |
clickCount | 続けてクリックした数 |
clickTime | 最後にクリックイベントが送信された時間 |
delta | 最後の更新からのデルタポインタ |
dragging | Determines whether the user is dragging the mouse or trackpad. |
enterEventCamera | 最後に OnPointerEnter イベントに関連付けられたカメラ |
hovered | マウスが上にのっているオブジェクトのスタックリスト |
lastPress | 最後に押された GameObject。 |
pointerCurrentRaycast | 現在のイベントにが関連付けられている RaycastResult |
pointerDrag | The object that is receiving OnDrag. |
pointerEnter | `OnPointerEnter` を受け取るゲームオブジェクト |
pointerId | Identification of the pointer. |
pointerPress | The GameObject that received the OnPointerDown. |
pointerPressRaycast | Returns the RaycastResult associated with a mouse click, gamepad button press or screen touch. |
position | 現在のポインタの位置 |
pressEventCamera | 最後に OnPointerPress イベントに関連付けられたカメラ |
pressPosition | The screen space coordinates of the last pointer click. |
rawPointerPress | 押下イベントを処理できない場合でも、オブジェクト上で押したことになります。 |
scrollDelta | 最後の更新から移動したスクロール量 |
useDragThreshold | ドラッグするときのしきい値を使用するかどうか |
どのような値が実際に得られるのかの確認
ブレークポイントを置いて、確認してみましょう
大きな緑の四角で囲われているところが、上記表と一致しています
例えば、positionは、"(275.00, 128.00)"になっています。これは、スクリーン座標になります
ディスカッション
コメント一覧
まだ、コメントがありません