今回はゲーム中の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をタッチすると少し動くようになっていると思います。端末で動作チェックをする時は、こちらの変更を使ってみてください!
まとめ
オブジェクトの選択を画面タッチから調べる方法については以上です!
これを利用すれば、選んだオブジェクトのマテリアルを変更したり消したりなど様々なことができるようになります。ぜひ使ってみてください!