Unityには、目に見えない光(レーザービーム)を飛ばして、シーン上のコライダーと衝突した位置を取得できるRaycastHitの機能があります。
Rayを利用して、クリックした位置にPrefabを生成する仕組みを作ってみましょう。
関連記事:
Rayが当たった位置までの距離
Rayを当たらなくするオブジェクト
Rayに当たったオブジェクトを削除
向いている方向へRaycastを出す
Raycastによる特定オブジェクトの接触判定
左右にRaycastの接触判定をつくる
斜めに向けたRaycastで衝突判定
クリックした場所にオブジェクトを置く
Rayで生成するPrefabを用意
まずは簡単に、シーン上に床と壁をつくりました。
ヒエラルキーに、空のオブジェクトを作成しましょう。
GameObjectという名前で表示されます。
続いて、生成したいオブジェクトをつくります。
今回は、Cubeオブジェクトを作成し、グリーン色をつけました。
これをPrefab化しましょう。
Assetsの中にPrefabsフォルダを作成し、ここにCubeをドラッグ&ドロップします。
ヒエラルキーにあるCubeは消しておきましょう。
Prefabデータに、RigidBodyコンポーネントを追加します。
クリックで生成するスクリプト
ClickPoint.csという名前でスクリプトを作成し、GameObject(空のオブジェクト)に追加します。
スクリプトはこのように書きました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ClickPoint : MonoBehaviour { public GameObject cube; void Update () { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Input.GetMouseButtonDown(0)) { if (Physics.Raycast(ray, out hit)) { Instantiate(cube, hit.point, Quaternion.identity); } } } } |
GameObjectのインスペクターを確認すると、キューブの項目が出てきます。
ここに、Cubeのプレハブを入れましょう。
プレイしてみましょう。
Rayとコライダーがぶつかった場所を取得して、Prefabオブジェクトを出現させます。
関連記事:
Rayが当たった位置までの距離
Rayを当たらなくするオブジェクト
Rayに当たったオブジェクトを削除
向いている方向へRaycastを出す
Raycastによる特定オブジェクトの接触判定
左右にRaycastの接触判定をつくる
斜めに向けたRaycastで衝突判定
クリックした場所にオブジェクトを置く