UnityでGetKeyが反応しなかったけど原因がわからなかった。

UnityのGetKyeが動かない

Unityでサンプルコードを貼り付けて動かなかったけど原因がわからなかった。左か右ボタンをおすとオブジェクトが横に動くC#のコードだ。

using UnityEngine;
using System.Collections;

public class RocketController : MonoBehaviour {
	void Update () {
		if (Input.GetKey (KeyCode.LeftArrow)) {
			transform.Translate (-0.1f, 0, 0);
		}
		if (Input.GetKey (KeyCode.RightArrow)) {
			transform.Translate ( 0.1f, 0, 0);
		}
	}
}

このコードをコピペしてゲームをデバッグしてみたら動かなかったので、原因がよくわからないので一旦消して作り直した。次やったら普通にうまくいった。うまくいかなかった原因がわからなかったのでもう一度作り直した。するとまたうまくいった。一体なにがわるかったのかわからない。

Unityでとりあえずゲームオブジェクトを動かすまでの手順

素材の準備

ここで一旦おさらいしておくことにする。今回つくっていたのは2Dのゲームだがまず、SpritesとScriptsというフォルダを作っておく。これらのフォルダはprojectのところでAssetsフォルダに作成する。ひとつひとつ作るのがめんどうな場合はpowershellを使うのもありだろう。
unity project

Scenesフォルダは最初はなくてもよい。Spritesにはゲームで使う画像などを入れておく。Spritesに画像が用意できたらそれをhierarkhyにドラッグ&ドロップする。hierarkhyにオブジェクトを配置するとSceneに反映される。
unity hierarkhy

オブジェクトを動かすためのスクリプトの作成

スクリプトのコードは上記のコードでOKだがスクリプトファイルの作成方法がいくつか存在する。projectのところで右クリックしてC#Scriptを選んで作成するか、Inspector上のadd compornentから作成する方法だ。文字だけでは伝わらないかもしれないが、add Compornentでスクリプトファイルを作成した場合かならずAssets直下にスクリプトファイルが作成される。

これだとScripsフォルダへの移動が面倒なので、Scriptsフォルダの中で右クリックしてC#Scriptを選んで作成するのがいい。

アタッチ

Unityでは特定のオブジェクトにスクリプトを登録することを「アタッチ」と呼ぶようだ。Inspectorでadd Componentをえらんでスクリプトを作成した場合、すでにスクリプトはアタッチ済みの状態で作成される。これ以外の方法でスクリプトファイルを作成した場合は自分でアタッチする必要がある。今回はオブジェクトを動かすスクリプトファイルを作成したので、それをアタッチする。

アタッチはhierarkhyにあるオブジェクトにアタッチするかInspectorのほうにアタッチする。どっちでもいいのでやりやすい方法でやる。
unity attach

スクリプトのアタッチがすんだらデバッグをしてみてオブジェクトが動くかどうかを確認する。

まとめ

UnityでGetKeyが反応しない場合とりあえず、一旦作り直してみる。おそらくなにかを作るプロセスで動かない原因が存在したはずだが今回はみつからなかった。