bool 変数 = Input.GetKey ( (KeyCode) ); (例) =|PEAL| if (Input.GetKey (KeyCode.Space)){ スペースキーが押されている時の処理; }
指定のキーが押されていればtrueを返す。
引数にはKeyCodeクラスのインスタンスを指定する。
bool 変数 = Input.GetKeyDown ( (KeyCode) ); (例) if (Input.GetKeyDown (KeyCode.Space)){ スペースキーが押された時の処理; }指定のキーが押されたらtrueを返す。
引数にはKeyCodeクラスのインスタンスを指定する。
上との違いが難しいが、「キーを押したときに一度だけtrueが返される」もの。
これにより、「今、キーを押した」ということをチェックできる。
bool 変数 = Input.GetKeyUp ( (KeyCode) ); (例) if (Input.GetKeyUp (KeyCode.Space)){ スペースキーが離された時の処理; }指定のキーが離されたらtrueを返す。
引数にはKeyCodeクラスのインスタンスを指定する。
常にtrueを得られるか、一度だけか、の違い。
GetKeyは、キーを押していれば常にtrue。
GetKeyDownだと「押したかどうか」をチェックするものだから、一度しかtrueは得られない。
例えば「キーでキャラクターを操作する」場合、GetKeyならば押している間ずっと動き続けるが、GetKeyDownでは押した瞬間だけ動き、それ以後は止まったまま。
GetKeyは、キーを押していれば常にtrue。
GetKeyDownだと「押したかどうか」をチェックするものだから、一度しかtrueは得られない。
例えば「キーでキャラクターを操作する」場合、GetKeyならば押している間ずっと動き続けるが、GetKeyDownでは押した瞬間だけ動き、それ以後は止まったまま。
Input.GetAxis("Horizontal")左右キーが押されているかを、左-1.0〜右1.0の値で取得する。
Input.GetAxis("Horizontal")上下キーが押されているかを、下-1.0〜上1.0の値で取得する。
public class myscript : MonoBehaviour { void Start () { } void Update () { if (Input.GetKey (KeyCode.UpArrow)) { transform.Translate (transform.forward * 0.1f); } if (Input.GetKey (KeyCode.DownArrow)) { transform.Translate (transform.forward * -0.1f); } if (Input.GetKey (KeyCode.RightArrow)) { transform.Translate (transform.right * 0.1f); } if (Input.GetKey (KeyCode.LeftArrow)) { transform.Translate (transform.right * -0.1f); } } }
forward ... 前に1移動する
Right ... 右に1移動する
Up ... 上に1移動する
上記はインスタンスプロパティなので、インスタンスであるtransformを作って、そこから呼び出す必要がある。
ちなみに後ろ、左、下はないので、マイナスにする。
Right ... 右に1移動する
Up ... 上に1移動する
上記はインスタンスプロパティなので、インスタンスであるtransformを作って、そこから呼び出す必要がある。
ちなみに後ろ、左、下はないので、マイナスにする。
- マウスボタンを押したかどうかのチェック
- マウスポインタの位置の取得
- マウスの位置がシーンの中でどの地点にあるのか調べる
- マウスが特定のオブジェクトをタッチしているかどうかを調べる
bool 変数 = Input.GetMouseButton( 番号 ); (例) if (Input.GetMouseButton (0)){ 左クリックされている時の処理; }
0 ... 左ボタン
1 ... 右ボタン
2 ... 中央ボタン
bool 変数 = Input.GetMouseButtonDown( 番号 ); (例) if (Input.GetMouseButtonDown (0)){ 左クリックされた時の処理; }
bool 変数 = Input.GetMouseButtonUp( 番号 ); (例) if (Input.GetMouseButtonUp (0)){ 左クリックが離された時の処理; }
public class myscript : MonoBehaviour { Vector3 vec; void Start () { vec = new Vector3 (0.1f, 0.1f, 0.1f); } void Update () { if (Input.GetMouseButton (0)) { transform.Rotate (vec); } } }
Inputクラスにある「mousePosition」プロパティを調べる。
これでマウスポインタの位置を示すVector3インスタンスが得られる。
Vector3 変数 = Input.mousePosition; (例) if (Input.GetMouseButtonDown (0)){ Vector3 v = Input.mousePosition; }
これでマウスポインタの位置を示すVector3インスタンスが得られる。
得られた値は、そのままシーンの位置としては扱えない。
なぜなら、シーンに配置されているオブジェクトは、シーンの絶対座標で、位置が設定されているため。
ゲーム画面の表示では、シーンに配置されたカメラを通してみた景色になっている。
ということは、例えば画面上にあるオブジェクトをクリックした場合、画面上のクリック位置と、シーンに配置されているオブジェクトが実際にある位置は同じ値ではない、ということ。
このため、マウスポインタの位置を実際のシーン上に反映させるには、得られた位置情報をシーンの絶対座標上の位置に変換する作業が必要となる。
なぜなら、シーンに配置されているオブジェクトは、シーンの絶対座標で、位置が設定されているため。
ゲーム画面の表示では、シーンに配置されたカメラを通してみた景色になっている。
ということは、例えば画面上にあるオブジェクトをクリックした場合、画面上のクリック位置と、シーンに配置されているオブジェクトが実際にある位置は同じ値ではない、ということ。
このため、マウスポインタの位置を実際のシーン上に反映させるには、得られた位置情報をシーンの絶対座標上の位置に変換する作業が必要となる。
画面上の位置を、シーンの絶対座標に変換するには、カメラに用意されているメソッドを使用する。
引数にz軸の値を指定する。
マウスは二次元なので、奥行きは引数で補う。
Vector3 変数 = <Camera>.ScreenToWorldPoint ( float値 );
引数にz軸の値を指定する。
マウスは二次元なので、奥行きは引数で補う。
public class myscript : MonoBehaviour { void Start () { } void Update () { if (Input.GetMouseButtonDown (0)) { Vector3 pos = Input.mousePosition; System.Random r = new System.Random (); float f = Random.value * 3; pos.z = f; Vector3 newpos = Camera.main.ScreenToWorldPoint (pos); transform.position = newpos; } } }
Rayは、「ある地点から、画面の奥へと無限に伸びる見えない直線」。
クリックした位置を取得したら、画面上のその地点から無限大の奥(z方向)までレーザービームを発射し、ゲームオブジェクトを貫いているかどうか調べる。
クリックした位置を取得したら、画面上のその地点から無限大の奥(z方向)までレーザービームを発射し、ゲームオブジェクトを貫いているかどうか調べる。
Ray 変数 = <Camera>.ScreenPointToRay( <Vector3> );
引数には、位置を示すVector3インスタンスを指定する。
このVector3の位置は、画面上の位置を示す値(シーン上の絶対座標ではない)を用意すること。
bool 変数 = Physics.Raycast( (Ray) , out <RaycastHit> , 長さ );
Physics.Raycast
- 第1引数 ... Rayが何かのゲームオブジェクトを貫通しているか調べるもの。接触していればtrue、何も触れていなければfalseが返される。
- 第2引数 ... 「RaycastHit」という構造体の変数を指定する。outの意味は「この構造体の変数に値を書き出す」ということ。つまり、第2引数は、何かの値を指定するのではなく、「変数を指定すると、そこにRaycastHit構造体が書き出される」という不思議な働きをする。
- 第3引数 ... どこまで調べるか。float値。100fとすれば、100の距離までの間に接触したものを調べる。
Rayに最初に接触しているゲームオブジェクトに関する情報をまとめたもの。
RaycastHitにある3つのプロパティ
「上記のプロパティを操作すれば接触オブジェクトを動かせる」、ということを覚えておく。
RaycastHitにある3つのプロパティ
- "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) { //flgがfalseだった場合の処理 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; } } } } }
コメントをかく