【Unity】オブジェクトのタグ

 Unityのゲームオブジェクトには”タグ”というものを設定できる。これはオブジェクトの識別などに利用できる。オブジェクト名はシーン内で重複できないが、タグは複数のオブジェクトに共通のタグを付けることができる。具体的な用途としては敵味方のビームを識別したり、破壊できてはいけない建物や地面などに付けて利用する。
 設定方法は以下の図の通り。Inspector【インスペクター】のオブジェクト名の下にある[Tag]のプルダウンから選択する。プルダウン一番下の[AddTag…]から自分でタグをつくることもできる。

 利用も至ってシンプルでgameObject.tag【ゲームオブジェクト.タグ】でstring型で読み出しが可能。識別に利用するなら以下のようにif文で文字列と比較すればよい。

void OnCollisionEnter(Collision dareka){
   if(dareka.gameObject.tag == "kaerusan"){
      //接触したdarekaのタグがkaerusanだったときに行う処理
   }
}

【Unity】ボタンをつくる

 Button【ボタン】コンポーネントの実装で押しボタンが作れる。
 RectTransform【レクトトランスフォーム】、CanvasRenderer【キャンバスレンダラー】、image【イメージ】などのコンポーネントも合わせて必要になるので素直に[Hierarchy【ヒエラルキー】] >から[+] > [UI] > [Button]と進んでボタンオブジェクトを追加することを推奨する。

 作成したボタンはその状態で押すことができるが、押されたときにどんな処理を発生させるかは何も設定されていない。自分で呼びたい関数などを設定していくことで機能する。設定方法は以下の図の通り。Buttonコンポーネントの「OnClick」に登録していく。追加は右下のみどりで示した「+」マークから。

 追加された画面にはオブジェクトとそのオブジェクトの持つコンポーネントの変数や関数を設定していく。オブジェクトの設定はボタンで変化を起こしたいオブジェクトなどを[None(Object)]の枠にドラッグ&ドロップするだけ。

 オブジェクトを設定すると右隣のNoFunction【ノーファンクション】から対象のコンポーネント及び関数や変数が選べるようになる。更に変数や関数を設定した場合、変数や引数の型に合わせて下に入力欄ができ、押したときどのような値に変更するかが設定できる。

【Unity】コンソールに表示する

 UnityエディターのConsole【コンソール】ウィンドウにはコンパイルエラーの他にデバッグ用のログを表示させることができる。
 string型以外にも数値や変数、オブジェクトなど割りと何を入れても変換して表示してくれる。

Debug.log("この文字列を表示する");

 実際の制作物の機能には一切影響を出さず簡単に変数の数値なども確認できるため、デバッグには非常に重宝する。単純に処理がどこまで正常に流れているかを確認するだけでも不具合原因の特定に利用できる。

【Unity】時間を測る・使う

 Time.deltaTime【タイム.デルタタイム】が利用できる。
 これは前回の1フレームの処理にかかった時間(秒)が取得できる。つまりこれを別の変数などに毎フレーム加算していくことで経過時間などもできる。以下にシンプルにカウントするだけのサンプルを示す。

float ojikan;

void Update(){
   ojikan += Time.deltaTime;
}

【Unity】接触・衝突・当たり判定

 接触や衝突の判定には大きく2つ、 OnCollisionEnter ()【オンコリジョンエンター】かOnTriggerEnter()【オントリガーエンター】 のどちらかを利用できる。以下にそれぞれの特徴をまとめる。

CollisionTrigger
Colliderコンポーネント必要必要
Rigidbodyコンポーネントどちらかに必要どちらかに必要
is Triggerどちらも無効どちらかを有効
取得できる情報CollisionCollider
物理的影響影響あり影響なし

 これらはStart()【スタート】関数やUpdate()【アップデート】関数と別で宣言して利用する関数で、判定が起こったときに中に記述した処理を実行する。Enterの他にStay【ステイ】、Exit【イグジット】なども利用できる。それぞれの判定をまとめると以下の通り。

Enter接触した瞬間のみ
Stay接触している間常に
Exit離れた瞬間のみ

 使い分けとしては物理的影響の有無が大きい。具体的な例を出せば、
 ・着地しているときにダメージを与えたい→OnCollisionStay()
 ・自動ドアのセンサのように侵入を検知したい→OnTriggerEnter()
などがイメージしやすい。

 また、どちらも取得した情報からGameObjectを取得することができる。以下にそのサンプルを示す。

void OnCollisionEnter(Collision nantara){
   Debug.Log(nantara.gameObject.name);  //接触したオブジェクトの名前情報を表示
}

void OnTriggerEnter(Collider nantara){
   Debug.Log(nantara.gameObject.name);  //接触したオブジェクトの名前情報を表示
}

【Unity】テキストの表示

 画面上にテキストを表示したい場合はText【テキスト】コンポーネントを利用する。これはRectTransform【レクトトランスフォーム】やCanvasRenderer【キャンバスレンダラー】などと組み合わせて利用するため新しく文字を表示したい場合は素直にテキストオブジェクトを追加することを推奨する。以下の図のように「Hierarchy」>「+」>「UI」>「Text」とたどると追加できる。

 TextコンポーネントのTextの枠に入力した文字を画面上に表示する。その下の「Font Size【フォントサイズ】」や「Color【カラー】」で文字の大きさや色も変更できる。尚、RectTransformで指定した表示エリアからはみ出るサイズになった場合何も表示されなくなるので注意。また、RectTransformの位置座標が画面外に指定されている場合にも表示されない。

 スクリプトから表示する文字列を変更したい場合このTextプロパティにString型で代入すればよい。他のコンポーネントやそのプロパティの変更については「【Unity】コンポーネントの取得」を参照。
 また、単純に表示・非表示を切り替えたいだけであればオブジェクトのアクティブ・非アクティブをコントローするだけでよい。こちらについては「【Unity】アクティブ・非アクティブ」を参照。

【Unity】キー入力の利用

 キーボードのキーが押されているかどうかはInput.GetKey()【インプットゲットキー】で取得できる。型はbool。押されていればtrue【トゥルー】、押されていなければfalse【フォルス】。また、押されたタイミングや指を離したタイミングも以下のように取得可能。

Input.GetKey()押している間true
Input.GetKeyDown()押した瞬間true
Input.GetKeyUp()離した瞬間true

 引数には”String型のキーの名称”か”KeyCode【キーコード】”を渡せる。よく使いそうなキーコードに関して以下にまとめる。更に全てのキーコードを知りたい場合は公式のリファレンスを参照。

KeyCode.Space スペースキー
KeyCode.AAキー(他のアルファベットも同様)
KeyCode. UpArrow 上矢印キー
KeyCode.DownArrow下矢印キー
KeyCode.RightArrow右矢印キー
KeyCode.LeftArrow左矢印キー
KeyCode.Alpha11キー(他の数字も同様)

 boolを返すので下記のようにそのままif文の条件に入れて利用することが多い。KeyCodeを利用する場合文字列ではないので””を付けてしまわないように注意。

if (Input.GetKeyDown(KeyCode.Space)){
            Debug.Log("スペースキーが押されたよ!");
        }

【Unity】アクティブと非アクティブ

 オブジェクトやコンポーネントにはアクティブな状態と非アクティブな状態がある。これは簡単に言うとゲームに登場しているか、舞台裏で控えているかの違い。Unityエディタ上でもチェックボックスで切り替えることができるので押して見るとわかりやすい。

 これはスクリプトから切り替えることができる。オブジェクトとコンポーネント(スクリプト)の切替方法は以下の通り。true【トゥルー】でアクティブ、false【フォルス】で非アクティブ。

//オブジェクトを非アクティブに
gameObject.SetActive(false); 

//コンポーネントを非アクティブに
GetComponent<コンポーネント名>().enabled = false; 

【Unity】マウスボタン・クリックの検出

 マウスのボタンが押されているかどうかはInput.GetMouseButton()【インプット.ゲットマウスボタン】で取得可能。型はbool。押されていればtrue【トゥルー】、押されていなければfalse【フォルス】。引数は0,1,2で指定可能で、それぞれ下図のようにマウスの左ボタン、右ボタン、ホイールの押し込みに対応している。

 boolを返すので下記のようにそのままif文の条件に入れて利用することが多い。尚、押している間はずっとtrueを返すので連続させたくない場合は工夫が必要である。

if (Input.GetMouseButton(0)){
            Debug.Log("クリックされちゃったぜ");
        }