Rayは、「ある地点から、画面の奥へと無限に伸びる見えない直線」。
クリックした位置を取得したら、画面上のその地点から無限大の奥までまっすぐに伸びるレーザービームを発射するイメージ。
そしてそのレーザービームが、ゲームオブジェクトを貫いているかどうかを調べる。
もし貫通していたら、そのオブジェクトをクリックしていると判断できる。
クリックした位置を取得したら、画面上のその地点から無限大の奥までまっすぐに伸びるレーザービームを発射するイメージ。
そしてそのレーザービームが、ゲームオブジェクトを貫いているかどうかを調べる。
もし貫通していたら、そのオブジェクトをクリックしていると判断できる。
bool TriggerWall(){ RaycastHit hit; bool WallBool; WallBool = Physics.Raycast (transform.position, Vector3.forward, out hit, 1); return WallBool; }
Physics.Raycast (原点<Vector3>, 方向<Vector3>, out <Raycast>, 距離<float>);
back | Vector3(0, 0, -1) と同じ意味 |
down | Vector3(0, -1, 0) と同じ意味 |
forward | Vector3(0, 0, 1) と同じ意味 |
left | Vector3(-1, 0, 0) と同じ意味 |
one | Vector3(1, 1, 1) と同じ意味 |
right | Vector3(1, 0, 0) と同じ意味 |
up | Vector3(0, 1, 0) と同じ意味 |
zero | Vector3(0, 0, 0) と同じ意味 |
第1引数・・・Rayを指定。このRayが何かのゲームオブジェクトを貫通しているかどうかを調べている。
何かに接触していればtrue。何も触れていなければfalseが返される。
第2引数・・・「RaycastHit」構造体の変数を指定する。
変数を指定すると、そこにRaycastHit構造体が書き出される。
第3引数・・・どこまで調べるかを指定する。float値。
「100f」とすれば、100の距離までの間に接触したものを調べる。
何かに接触していればtrue。何も触れていなければfalseが返される。
第2引数・・・「RaycastHit」構造体の変数を指定する。
変数を指定すると、そこにRaycastHit構造体が書き出される。
第3引数・・・どこまで調べるかを指定する。float値。
「100f」とすれば、100の距離までの間に接触したものを調べる。
Rayに最初に接触しているゲームオブジェクトに関する情報をまとめたもの。
transform | 接触したゲームオブジェクトのtransform。これを操作すれば接触したオブジェクトを動かせる。 |
position | 接触した地点を示す。値はVector3インスタンス。 |
collider.gameObject | 接触したゲームオブジェクトのインスタンス。 |
public class myscript : MonoBehaviour { Vector3 stdSize; Vector3 smlSize; RaycastHit hit; int counter = 0; bool flg = false; void Start () { stdSize = new Vector3(1f, 1f, 1f); smlSize = new Vector3(0.5f, 0.5f, 0.5f); } void Update () { if (flg){ if (counter <= 0){ hit.transform.localScale = stdSize; flg = false; } else { counter--; } } if (Input.GetMouseButtonDown(0)){ Vector3 pos = Input.mousePosition; pos.z = 3.0f; Ray ray = Camera.main.ScreenPointToRay(pos); if (!flg){ if (Physics.Raycast(ray, out hit, 100)){ hit.transform.localScale = smlSize; counter = 100; flg = true; } else { Vector3 newpos = Camera.main.ScreenToWorldPoint(pos); transform.position = newpos; } } } } }
コメントをかく