はじめてのUnity 【第13回 Unityでバランスゲームを作ろう①】 ~キー入力でオブジェクトを動かす編~
はじめてのUnity 【第13回 Unityでバランスゲームを作ろう①】 ~キー入力でオブジェクトを動かす編~
Unityでバランスゲームを作ろう①
~キー入力でオブジェクトを動かす編~
前回、Updateメソッドを使ってオブジェクトを回転させました。
今回は、キー入力によってオブジェクトを任意の方向に回転させてみたいと思います。
また、今までやってきたコンポーネントを組み合わせて、
方向キーを入力してステージを傾けて、ボールを穴に落とすといった、ちょっとしたゲームを作ってみます。
Input.GetKey() メソッド
何かしらの入力に対して処理を返すメソッドはいくつかありますが、今回はGetKey系のメソッドを使用します。
(他には、Input.GetButton系、Input.GetMouseButton系 などがあり、用途によって使い分けます。)
サンプルコード
今回使用するサンプルコードです。
using UnityEngine; using System.Collections; public class GetKey : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (Input.GetKey("up")) { transform.Rotate (1f,0f,0f); } if (Input.GetKey("down")) { transform.Rotate (-1f,0f,0f); } if (Input.GetKey("right")) { transform.Rotate (0f,0f,-1f); } if (Input.GetKey("left")) { transform.Rotate (0f,0f,1f); } } }
スクリプトの12~26行目を見てみましょう。
前回紹介したUpdate() メソッドがあり、その中にif() というメソッドが4つあります。
さらにif() の中には、Input.GetKey() というメソッドがあります。
if() というメソッドは、「もし()なら、{}する」というものです。
Input.GetKey() メソッドは、「()の中のキー入力に対して、{}する」というものです。
if (Input.GetKey("up")) { transform.Rotate (1f,0f,0f); }
つまり14~15行目には
「もし、upキーの入力があったら、TransformコンポーネントのRotateの値を、X軸を中心に1フレーム毎に1度回転する」
という内容のスクリプトが書かれています。
これが上下左右の4つのキー入力分なので、4つ書かれているというわけです。
ゲームシーン作成
ゲームシーンを作成しましょう。
上図のようなシーンの構築を目指します。
①フロアの作成
土台となるフロアを作成しましょう。
Hierarchy>Create>Cube を選択してCubeを5つ用意します。
それぞれの名前とTransform のパラメーターは以下のようにしましょう。
オブジェクト名 | ポジション | ローテーション | スケール |
---|---|---|---|
Floor1 | 2.5, 0, 3.25 | 0, 0, 0 | 6.5, 1, 5 |
Floor2 | 3.25, 0, -2.5 | 0, 0, 0 | 5, 1, 6.5 |
Floor3 | -2.5, 0, -3.25 | 0, 0, 0 | 6.5, 1, 5 |
Floor4 | -3.5, 0, 2.5 | 0, 0, 0 | 5, 1, 6.5 |
Slide | 8, 4, 5 | 0, 0, 30 | 6, 0.2, 1 |
Floor1~Floor4 は連動して1つの床として振る舞ってほしいので、空のオブジェクトを作成してFloor1~Floor4を入れ子構造にします。
空のオブジェクトは、GameObject>Create Empty から作成しましょう。
オブジェクト名 | ポジション | ローテーション | スケール |
---|---|---|---|
Floor | 0, 0, 0 | 0, 0, 0 | 1, 1, 1 |
空のオブジェクト「Floor」を作成したら、Floor1~Floor4 をFloor の子階層にいれます。
これでFloor に適用した設定がFloor1~Floor4 にまとめて反映されます。
②ライト設置
初期状態だとシーンが真っ暗なので、ライトも用意します。
Hierarchy>Create>Directional light からライトを設置しましょう。
オブジェクト名 | ポジション | ローテーション | スケール |
---|---|---|---|
Directional light | 0, 50, 0 | 45, 45, 0 | 1, 1, 1 |
③ボールの作成
物理法則にしたがって動くボールを作成しましょう。
Hierarchy>Create>Sphere から球体を用意します。
オブジェクト名 | ポジション | ローテーション | スケール |
---|---|---|---|
ball | 10, 10, 5 | 0, 0, 0 | 1, 1, 1 |
Ball が白いままだとわかりづらいので、色をつけましょう。
Project>Create>Material からマテリアルを作成し、Main Color を好きな色にしましょう。
Material の名前を色名にしておくと、再利用するときに判りやすいです。
Ball にはRigidbody を追加しておきましょう。
これでBall は物理挙動を再現できるので、Floor の傾きにしたがって転がるようになります。
④スクリプトを適用
フロアがキー入力で回転するように、スクリプトを適用しましょう。
Project>Create>C# Script からC# のスクリプトファイルを作成し、名前をGetKey.cs として上記のサンプルコードを書きます。
このときサンプルコードのクラス名と、スクリプトファイル名が一致していないと動かないので注意してください。
作成したGetKey.cs はFloor に適用します。これでFloor1~Floor4 が、Floor の位置を中心として同時に回転してくれます。
⑤カメラアングルの調整
カメラはゲーム中の視点になるので、プレイ中のシーンが見やすい位置と角度に調整しましょう。
オブジェクト名 | ポジション | ローテーション | スケール |
---|---|---|---|
Main Camera | 0, 20, -15 | 45, 0, 0 | 1, 1, 1 |
ここまで出来たら再生ボタンを押して、とりあえずプレイしてみましょう。
方向キーでフロアが回転して、ボールが転がせたらOKです。
まとめ
今回作成したものは、最小限のパーツでほんの少しのゲーム要素を表現しただけの非常にシンプルなものですが、
それでもゲームはゲームです。
さらにいろいろなゲーム要素を追加して組み合わせれば、さらにスケールの大きいゲームを作ることができます。
あとはスタート画面や、タイム表示、クリアとゲームオーバー、リスタートなどの機能があれば、ひとつのゲームとして完成します。
次回はこのシーンに、ゲームクリアとゲームオーバーの処理を追加していきたいと思います。
エンジニア転職・人材紹介サービス 【正社員】SE・PG(オープン・Web・スマホアプリ)/アプリカティブ株式会社 | |
エンジニア転職・人材紹介サービス 【正社員】システムエンジニア/株式会社システムサポート |
未経験OKの仕事 | 上場企業の仕事 | 高待遇の仕事 | 外資系の仕事 | 社内SEで検索 | 自社サービスで検索