時代に翻弄されるエンジニアのブログ

ゲームプログラマをやっています。仕事やゲームや趣味に関してつらつら書きたいと思います。

Unityで画面をタップした位置のオブジェクトの情報が知りたい

f:id:tkymx83:20191023010427p:plain
こんにちは、今日はゲームを作っています。

シムシティのようなシミュレーションゲームなどでマウスを使って建物を設置したい時はありませんか?
今回はUnity でどのように行うかを解説します。

やりたいこと

画面をタップして初めてオブジェクトとあたった地点がほしい

コード

using UnityEngine;

/*諸々省略*/

Camera mainCamera = /*使用するカメラを指定*/
var ray = mainCamera.ScreenPointToRay(Input.mousePosition);

RaycastHit Hit;
if (Physics.Raycast(ray, out Hit))
{
    Debug.Log(Hit.point);
}

概要

  • マウスでタッチした位置にカメラからのレイを飛ばす
    • レイは光線のようなもので3D空間内の直線と考えてください。
  • ヒットしていればその地点の座標を表示する

登場人物

Camera.ScreenPointToRay

カメラから指定地点までのレイを作成します。
docs.unity3d.com

Physics.Raycast

レイとGameObjectの当たり判定を行う
docs.unity3d.com

RaycastHit

Physics.Raycast の結果を格納する。よく使う変数の紹介をします

  • point :あたった地点
  • distance : レイの原点(今回はカメラ位置)までの距離
  • transform:あたったコライダーの Transform

docs.unity3d.com

まとめ

Unity では簡単に画面タップ処理がかけていいですね。レイの当たり判定を手書きしようとすると計算量の問題とあたり判定の複雑さで死にそうになります。