質問: unityで、文字そのものに当たることで、その文字を返すようにしたいです。 ですが、unityはtextobjを作るとcanvasの子要素になり触れられません。 やりたいことは、並べられた単語から、ある特定の単語を選べるようにすることです。 何か方法はありますか?それか、疑似的な方法はありますか? 当たり判定を発生させるやりたい方法は、VRを想像してもらい、3Dのシリンダーが文字を貫いた状態でクリック(それに準ずる人間の選択)判定を行うというのを考えております。
回答: Unity Eventのインターフェイスを実装し条件を満たすことでクリックできるようになります。 コード書いてみたので適当なテキストにアタッチして試してみてください。 !イメージ説明 ### Unity Eventが動作する条件 1. テキストのRaycast Targetがオンになっている !イメージ説明 2. EventSystemがヒエラルキー上にある !イメージ説明 ### サンプルコード **TextFlipTestObject.csという名前で保存** ``` using UnityEngine; using UnityEngine.EventSystems; public sealed class TextFlipTestObject : MonoBehaviour, IPointerClickHandler { // フリップしたか? public bool IsFliped{ get; private set; } // 文字をクリックした時 IPointerClickHandlerを実装 public void OnPointerClick(PointerEventData eventData) { // フリップしていない場合 scaleを使って180°回転させる フリップしている場合0°に戻す transform.localScale = new Vector3(IsFliped ? 1 : -1, 1, 1); // isFlipedの逆を代入 例) isFlipedがtrueの場合falseを代入 IsFliped = !IsFliped; } } ``` ※ 本来は`transform.localRotation`で回転を与えたいところですが、回転後イベントが効かなくなるので`transform.localScale`で回転を与えています。 ### Raycast Targetの場所 !イメージ説明 イメージにもあります。 !イメージ説明 ### Unity Eventのインターフェイスの種類 今回は`IPointerClickHandler`を実装しました。`IPointerClickHandler`を実装するとクリックした時`OnPointerClick`を呼んでくれます。それ以外にも`IPointerDownHandler`はクリック終了時など色々なインターフェイスがあります。 参照元 ### (おまけ)Visual Studioでインターフェイスを実装する際の便利機能 1 インターフェイス名を追加 !イメージ説明 2 インターフェイス名の上で右クリック > クイック修正 > インターフェイスを実装します。をクリック !イメージ説明 3 自動的に実装してくれます。あとは中身を好きに書き換えるだけです。 !イメージ説明 この機能はUnity Eventだけではなくすべてのインターフェイスで使える便利機能です。