【Unity】RaycastHit : マウスクリック位置 取得方法
using UnityEngine; using System.Collections; public class ShotControl : MonoBehaviour { [SerializeField] private GameObject shot; private float shotWait = 0; public float speed =3000.0f; void Update () { if(shotWait > 0){ shotWait-= Time.deltaTime; // returnでこのフレームを一旦抜ける return; } if(Input.GetMouseButton(0)) { shotWait=0.3f; Vector3 hitPoint; //マウスカーソルからRay放射 // maincameraにtagを設定する // boxcolliderをつける Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); // 仮想的な線を利用した衝突検出する // カメラから、マウス入力のあった位置までの間にある、オブジェクトを格納する // 任意の位置から任意の方向に向けて架空の線を出し、その線分上にあるオブジェクトを取得する // RaycastHit型の変数 RaycastHit hit; // if(Physics.Raycast( transform.position,Vector3.right,out hit, 10 )) // positionから右方向に10進んだ先までにオブジェクトがあればtrueが返される // 第三引数にoutで指定すると衝突したオブジェクトの情報が入る // 第一引数にはRaycastの原点の位置、第二引数は方向、 // 第三引数には衝突情報、第四引数には検知を行う距離、第五引数にはレイヤーマスクをとります // ※第三引数まで必須 // Rayが飛ばされたところから、200の間にオブジェクトがあればtrueを返し、hitにそれを格納する if(Physics.Raycast(ray, out hit, 200)) { if(hit.collider.gameObject == null) { return; } // hitした位置を格納する hitPoint = hit.point; }else{ return; } Vector3 point = transform.localPosition; GameObject obj = (GameObject)Instantiate(shot); obj.transform.localPosition = point; Vector3 line = Vector3.Normalize(hitPoint-obj.transform.position); obj.transform.LookAt(hitPoint); obj.transform.rigidbody.AddForce(line * speed); } } }
参考サイト