Unity5学習の際の覚え書き。

Rayとは

Rayは、「ある地点から、画面の奥へと無限に伸びる見えない直線」。
クリックした位置を取得したら、画面上のその地点から無限大の奥までまっすぐに伸びるレーザービームを発射するイメージ。
そしてそのレーザービームが、ゲームオブジェクトを貫いているかどうかを調べる。
もし貫通していたら、そのオブジェクトをクリックしていると判断できる。

指定の位置から発射されるRayを作成する

Ray 変数 = <Camera>.ScreenPointToRay( <Vector3> );

オブジェクトから発射される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>);
方向
backVector3(0, 0, -1) と同じ意味
downVector3(0, -1, 0) と同じ意味
forwardVector3(0, 0, 1) と同じ意味
leftVector3(-1, 0, 0) と同じ意味
oneVector3(1, 1, 1) と同じ意味
rightVector3(1, 0, 0) と同じ意味
upVector3(0, 1, 0) と同じ意味
zeroVector3(0, 0, 0) と同じ意味

Rayとオブジェクトの接触を調べる

bool 変数 = Physics.Raycast( <Ray>, out <RaycastHit>, 長さ );
Phisics.Raycast
第1引数・・・Rayを指定。このRayが何かのゲームオブジェクトを貫通しているかどうかを調べている。
何かに接触していればtrue。何も触れていなければfalseが返される。

第2引数・・・「RaycastHit」構造体の変数を指定する。
変数を指定すると、そこにRaycastHit構造体が書き出される。

第3引数・・・どこまで調べるかを指定する。float値。
「100f」とすれば、100の距離までの間に接触したものを調べる。
RaycastHit構造体とは
Rayに最初に接触しているゲームオブジェクトに関する情報をまとめたもの。
transform接触したゲームオブジェクトのtransform。これを操作すれば接触したオブジェクトを動かせる。
position接触した地点を示す。値はVector3インスタンス。
collider.gameObject接触したゲームオブジェクトのインスタンス。

Rayを使用したコード

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;
                                }
                        }
                }
        }

}

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

【メニュー編集】
Wiki記法ガイド

リンク

ゲームバー大阪心斎橋

ゲームバー大阪梅田

ゲームバー大阪心斎橋

ダーツ&ダイニングバー大阪梅田

メニュー

Unity


スマホ操作

Unity - GameObject

Unity - 3DCG

メンバーのみ編集できます