見出し画像

【Unity】超簡単!Raycastでマウス座標のマスを取得

どうも、マカロンです。

今回は「Raycastを使用してマウスポインタで合わせた位置のマスを認識」をやっていこうと思います。

意外と簡潔で正確なポインタ位置で1マスずつを認識するという記事はまだ見当たらなかったので書いていきます。


この記事でできること

画像1

仕様

カメラからRayをマウスポインタの位置に飛ばす
Planeを生成(一度のみ)
ヒットしたオブジェクトの座標をPlaneに代入
1マスが1.0fなのでPlaneが1.0f未満の場合はreturn

コード​

using UnityEngine;

public class SearchMass : MonoBehaviour
{
   private Camera mainCamera;
   private GameObject selectMassPlane;//選択されたマスの上に表示するPlane

   RaycastHit raycastHit;//Rayに接触したオブジェクト情報を取得して代入

   void Start()
   {
       mainCamera = Camera.main;
       raycastHit = new RaycastHit();
   }

   void Update()
   {
       Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition); //カメラからRayをマウスポインタの位置に飛ばす

       if (Physics.Raycast(ray, out raycastHit))
       {
           //Plane生成(一度のみ)
           if (!selectMassPlane)
           {
               selectMassPlane = GameObject.CreatePrimitive(PrimitiveType.Plane);
               selectMassPlane.transform.localScale = new Vector3(0.1f, 1.0f, 0.1f);
           }

           //1マスの幅が1.0fなのでそれ以下の移動はマスが変更されないためreturn;
           if (Vector3.Distance(selectMassPlane.transform.localPosition, raycastHit.transform.localPosition) < 1.0f) { return; }

           //Planeに選択マスの座標代入(y軸のみ選択マスの大きさを足す)
           selectMassPlane.transform.localPosition = raycastHit.transform.localPosition;
           selectMassPlane.transform.localPosition += new Vector3(0, 0.5f + 0.01f, 0);
       }
   }
}

解説

Planeの生成の部分はヒットしたマテリアルカラーの変更などに代用も可能です。今回は生成してるオブジェクトのマテリアルが同じものを使用しているのでこういう実装にしました。

最後に

短い記事になりましたが、誰かのお役に立てる記事になっていることを願っています。ではまた~



ゲームを作るにはやはりお金がないとできることが限られてしまいます。なのでよろしければどうか支援してくださるとうれしいです