MainCameraを斜めアングルから撮影した状態で、オブジェクトを掴んで動かせるように、スクリプトを作成してみましょう。
マウスでドラッグでSphereを持ち運び、床の上を移動させることができます。
関連記事:
オブジェクトを掴んで動かす(Zを固定)
マウスカーソルについていくオブジェクト
マウスカーソルに追従して左右に移動
クリックした空間にオブジェクトを置く
クリックした場所にオブジェクトを置く
マウスで掴んで床の上を動かす
PlaneとSphereを作成します。
PlaneのY座標は-0.5にして、Sphereを地上に出します。
MainCameraの位置と回転を変えて、斜めからのアングルで映るようにします。
ゲームビューではこのように見えています。
GrabObject.csを作成し、Sphereに追加します。
GrabObject.csを記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class GrabObject : MonoBehaviour { SphereCollider sphereCol; void Start() { sphereCol = GetComponent<SphereCollider>(); } void OnMouseDrag() { sphereCol.enabled = false; RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit)) { transform.position = new Vector3 (hit.point.x, 0, hit.point.z); Debug.Log(hit.collider.name); } } void OnMouseUp() { sphereCol.enabled = true; } } |
ゲームプレイして、動きを確認しましょう。
ドラッグすれば、オブジェクトを持ち運ぶことができます。
OnMouseDrag()は、ドラッグしている間ずっと呼び出されます。
このままではドラッグ中、SphereにRayが照射され、微妙に位置ズレしてしまいます。
Planeに対して照射させるために、クリックボタン押下時にコライダーをFalseに、離した時にTrueにしています。
コンソールを見ると、照射オブジェクトにPlaneの名前が確認できます。
関連記事:
オブジェクトを掴んで動かす(Zを固定)
マウスカーソルについていくオブジェクト
マウスカーソルに追従して左右に移動
クリックした空間にオブジェクトを置く
クリックした場所にオブジェクトを置く