GetKeyDownとかGetButtonUpとかがtrueになるタイミングの遷移について

# はじめに
　Unityゲームエンジンを用いたゲーム開発において、Input.GetKeyDownやInput.GetButtonUpなどのメソッドを使ったことがある方は多いと思います。スマートフォン向けのゲームでは使わないかも知れませんが、学習目的でスペースボタンを押したら弾丸を発射するようなものを作ったことはありませんか？その際こららのメソッドを使ったと思います。

　さてInputクラスの、GetKeyDown、GetKey、GetKeuUpメソッドはそれぞれ、Keyを押した時、押している間、押していたキーを上げた時に、trueを返すメソッドですね。そこまでは把握されている方は多いと思います。

　これに関して、もうちょっと細かくそれぞれがtrueを返すタイミングを紹介します。といっても、[こちら](http://unity3d.com/learn/tutorials/modules/beginner/scripting/get-button-and-get-key)のUnityの公式チュートリアルの動画で、とても分かりやすく説明している内容を文字に起こしただけですが。

　※ちなみに[こちら](http://qiita.com/RyotaMurohoshi/items/688fe33f44de8339c497)で、GetKey系とGetButton系の使い分けを書きました。

# メソッド一覧


* [Input.GetKeyDown](http://docs.unity3d.com/ScriptReference/Input.GetKeyDown.html)
* [Input.GetKey](http://docs.unity3d.com/ScriptReference/Input.GetKey.html)
* [Input.GetKeyUp](http://docs.unity3d.com/ScriptReference/Input.GetKeyUp.html)
* [Input.GetButtonDown](http://docs.unity3d.com/ScriptReference/Input.GetButtonDown.html)
* [Input.GetButton](http://docs.unity3d.com/ScriptReference/Input.GetButton.html)
* [Input.GetButtonUp](http://docs.unity3d.com/ScriptReference/Input.GetButtonUp.html)

# 呼び出し例
Input.Get系のメソッドは、MonoBehaviourクラスのUpdateメソッド内で次のように呼びだします。

```csharp:Input.GetKeyDownメソッドの呼び出し例
using UnityEngine;

public class InputGetKey : MonoBehaviour
{
	void Update ()
	{
		if (Input.GetKeyDown (KeyCode.Space)) {
			Debug.Log ("Input.GetKeyDown");
		}
	}
}
```

# GetButton系とGetKey系のメソッドの返却値の遷移

それぞれの状態で、InputクラスのGetButton系とGetKey系のメソッドの返却値の遷移を紹介します。

## キー・ボタンを押していない状態

| メソッド                   | 返却値 |
|:--------------------------|:------:|
| GetKeyDown(GetButtonDown) | false  |
| GetKey(GetButton)         | false  |
| GetKeyUp(GetButtonUp)     | false  |


## キー・ボタンを押した瞬間

| メソッド                   | 返却値 |
|:--------------------------|:------:|
| GetKeyDown(GetButtonDown) | true   |
| GetKey(GetButton)         | true   |
| GetKeyUp(GetButtonUp)     | false  |

1フレームのみです。

## キー・ボタンを押している間

| メソッド                   | 返却値 |
|:--------------------------|:------:|
| GetKeyDown(GetButtonDown) | false  |
| GetKey(GetButton)         | true   |
| GetKeyUp(GetButtonUp)     | false  |

キーを押した瞬間の次のフレームから、押している間は何フレームでもこの状態です。

## キー・ボタンを離した瞬間

| メソッド                   | 返却値 |
|:--------------------------|:------:|
| GetKeyDown(GetButtonDown) | false  |
| GetKey(GetButton)         | false  |
| GetKeyUp(GetButtonUp)     | true   |

1フレームのみです。

## キー・ボタンを押していない状態

| メソッド                   | 返却値 |
|:--------------------------|:------:|
| GetKeyDown(GetButtonDown) | false  |
| GetKey(GetButton)         | false  |
| GetKeyUp(GetButtonUp)     | false  |

もとに戻ります。

# GetButton系とGetKey系のメソッドの返却値の遷移のポイント

* キー・ボタンを押した瞬間はGetKeyDown(GetButtonDown)もGetKey(GetButton)も両方trueを返す
* GetKeyDown(GetButtonDown)とGetKeyUp(GetButtonUp)は1フレームのみtrueを返す
* GetKeyUp(GetButtonUp)がtrueの時、GetKey(GetButton)はfalse

　ちょっと補足。Input.GetXXX系のメソッドは、そのフレーム内であれば結果は同じで、そのフレーム内であれば何回呼び出しても結果は変わらないです。

# まとめ
　InputクラスのGetButton系メソッドとGetKey系のメソッドの返り値の遷移についてまとめました。ちなみに[こちら](http://unity3d.com/learn/tutorials/modules/beginner/scripting/get-button-and-get-key)の動画でとても分かりやすく説明されているのを見て、[Inputクラスのリファレンス](http://docs.unity3d.com/ScriptReference/Input.html)や各メソッドのリファレンスには載っていないと思い、この投稿にまとめました。

　[Unityのチュートリアル](http://unity3d.com/learn/tutorials/modules)の動画は、非常参考になると思います。以外と知らなかったという情報があると思います。

　動画自体は英語ですが、Youtubeの字幕機能で日本語の字幕付きで見ることも可能です。

# あわせて良かったらどうぞ！

* [InputクラスのGetKey系とGetButton系のどっちを使えば良いの？を調べてみた](http://qiita.com/RyotaMurohoshi/items/688fe33f44de8339c497)
* [Input.GetAxisとInputManagerの関連設定について](http://qiita.com/RyotaMurohoshi/items/7868752a3f056affa2df)