【Unity】画面タッチで3D空間のオブジェクト選択

Unityオブジェクト選択
スポンサーリンク

今回はゲーム中の3D空間上で、画面タッチ(PCの場合画面クリック)が行われた場所を判定し、オブジェクトを選択するサンプルコードを書いてみたいと思います。

こんな人におすすめ

・3Dオブジェクトをゲーム中に選択したい
・端末やPCの両方で判定を行いたい

プロジェクトの準備

プロジェクト

プロジェクトには以下のものを置いておきます。

・Cube 2 個
 オブジェクトの選択テストに使います。
・空のゲームオブジェクト
 この後のサンプルをアタッチします。

準備ができたら以下のサンプルコードを空のオブジェクトにアタッチしてください。

■ScreenPoint

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ScreenPoint : MonoBehaviour
{
    RaycastHit _hit;

    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        // Unity上での操作取得
        if (Application.isEditor)
        {
            if (Input.GetMouseButtonDown(0))
            {
                var _ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                if (Physics.Raycast(_ray, out _hit))
                {
                    // 選択されたオブジェクトへの処理
                    HitObj();
                }
            }
        }
        // 端末上での操作取得
        else
        {
            if (Input.touchCount > 0)
            {
                Touch touch = Input.touches[0];
                if (touch.phase == TouchPhase.Began)
                {
                    var _ray = Camera.main.ScreenPointToRay(touch.position);
                    if (Physics.Raycast(_ray, out _hit))
                    {
                        // 選択されたオブジェクトへの処理
                        HitObj();
                    }
                }
            }
        }
    }

    // 選択されたオブジェクトへの処理
    private void HitObj()
    {
        print(_hit.transform.name);
    }

}

動作確認と変更

アタッチ完了後は、実際にゲームを再生状態にしてオブジェクトをマウスクリックで選択してください。コンソールにオブジェクトの名前が表示されると思います。

ただ、このままではアプリでの動作チェックがいまいちわかりにくいので、「HitObj()」の中身(53行目)を書き替えます。

書き替え
print(_hit.transform.name);
_hit.transform.position += new Vector3(Random.Range(-0.5f,0.5f), Random.Range(-0.5f, 0.5f), 0);

この変更により、Cubeをタッチすると少し動くようになっていると思います。端末で動作チェックをする時は、こちらの変更を使ってみてください!

まとめ

オブジェクトの選択を画面タッチから調べる方法については以上です!

これを利用すれば、選んだオブジェクトのマテリアルを変更したり消したりなど様々なことができるようになります。ぜひ使ってみてください!