【はじめてのUnity】第一回:ボールを操作する
次回:【はじめてのUnity】第二回:ボールを右折左折させる >
おばんです、田中です。 4月から始まった案件がちょうど一ヶ月経って激化してくる頃合いではないでしょうか、されども世間はGW。 僕はちゃんと休みが取れました、ヤッタ!!
ということで新しいことを始めてみようと思い、Unityやっていきます。
はじめに
僕は基本的にiOS畑でしか生きてこなかったのですが、そろそろ新しいサブスキル的なものを欲しくなってきたのでUnityやってみようかなという感じです。 ですのであまり深い内容にはならないかもしれませんが、逆にそれを活かして僕のような初心者にもわかりやすいように画像・動画多めで書いていきます。
第一回は「とりあえず動くとテンションあがる!」 のでボールを動かしていきましょう。
1.プロジェクトの作成
インストール、初期セッティングが終わった状態でUnityを起動します。 起動して、以前にプロジェクトを作成した場合は以下の画面になります。
他の画面等で開いてしまった場合は、ナビゲーションバーのFileから"New Project"を選択しましょう。
すると以下のような画面になるので、Project Nameとプロジェクトを置くディレクトリを選択して"Create Project"を押しましょう。 なお、今回は3Dを選択します。
プロジェクトを作成すると以下のような画面になると思います。
layout変更
もし別な画面、インスペクタやウィンドウの表示が画像と違う場合、Layoutを2:3に変更してください。 ここは好みもあると思いますので、お好きなLayoutで進めていただいても構いません。
2.オブジェクトの追加・編集
次に3Dオブジェクトの追加を行っていきます。
planeの追加
Hierarchy -> Create -> 3D Object -> Plane と選択して、ボールが動くフィールドを生成します。
カメラの操作
さてオブジェクトを生成しましたが、そうなると視界を動かして、角度を変えて見ていきたいとなります。 画面左上の手のマークを押します。
そうすると、カーソルが手のマークに切り替わり、Sceneの中でドラッグすることで視界を動かすことができます。 拡大縮小はホイールを動かすことで操作でき、角度の変更はAltを押しながらドラッグするとできます。
sphereの追加
操作対象となるボールを追加しましょう。 Planeの時同様、Hierarchy -> Create -> 3D Object -> Sphereと選択していきます。
するとこんな風にボールが生成されます。
オブジェクトの移動
変なところに浮いてるので、座標を全て0にします。
すると今度はフィールドにめり込むので、Y座標を少し高く、0.55としましょう。
この時0.55とすると、フィールドから少し浮いた状態になります。 フィールドとぴったりなところはおそらく0.5のY座標ですが、あとで変なめり込みとかが起こると嫌なのでとりあえず0.55としておきます。
カメラの移動
画面左下の"Game"ウィンドウをみてください。 これが実際にゲームを再生した時に見える視点になるのですが、オブジェクトと若干距離を感じます。 カメラを移動して近づけてみましょう。
HierarchyのMain Cameraを選択します
その状態で画面左上の十字矢印マークを押します。 すると選択しているカメラに三本の色のついた矢印が現れます。
三本の矢印がそれぞれカメラのX, Y, Z座標を移動するための矢印で、矢印をドラッグ&ドロップすることによってカメラの位置を動かすことができます。 動かすと、それに追随して画面左下のGameウィンドウも動くと思いますので、それを見ながらカメラをちょうど良い位置に動かしてみましょう。
rigidbodyの追加
さて、ここまでだとただ球状のオブジェクトが生成されているだけの状態となります。 再生ボタンを押すとボールは空間に浮いたままの状態となるでしょう。
今後ボールがぶつかったり、フィールドの上で重力を元に動くには物理を適応させる必要があります。 そこで追加するのがRigidbodyコンポーネント。 Sphereを選択した状態で"Add Component"を押し、検索欄に"Rigi"くらいまで入力すると候補に"Rigidbody"が表示されるので、それを選択します。
こうすることで、SphereにRigidbodyを追加し物理を適応させることができました。
3.保存の仕方
いろいろやってきました! そろそろ保存しないとヤバいんじゃないかと怖くなってきたので保存をしましょう! Unityを選択した状態でCommand + Sを押しましょう。 すると以下のような画面が表示されます。
Sceneってなんだよ、どこに保存すれば!? とiOSしか知らない僕は一瞬パニックになりましたが、Sceneは今編集している画面。 iOSでいうと、Storyboardの一画面と考えると良さそうかと思います。 保存場所はAssetsの中でとりあえず大丈夫です。 保存するとAssetsフォルダの中にUnityマークでSceneが保存されました。
保存完了!
4.Rigidbodyの確認
若干前後はしてしまいましたが、先ほど追加したRigidbodyを確認してみましょう。 先ほどSphereのpositionのY座標を0.55としましたが、わかりやすいように1としてみましょう。
するとボールがよりフィールドから浮きました。 この状態でUnityの再生ボタンを押すと...
ボールがスッと落ちてきてフィールドに着地するのがわかります。 Rigidbodyが正しく反映されて、重力がボールに加わったので落ちてきたんですね。 この後、SphereのY座標は1のままでも0.55に戻してもらっても構いません。
5.Scriptの追加・編集
コードだ!コード書くぞ! Unityやってるとほぼコードを書かないで、なによりUnityの使い方が大変だとか思ってましたが案外コードも書くようです。
まずProject -> Create -> Folderといき、Scriptを入れるためのフォルダを作ります。
名前をScriptsと名付けましょう。
このフォルダにソースファイルを追加していきます。
Scriptsフォルダの作成
先ほど作成したScriptsフォルダを選択した状態でProject -> Create -> C# Scriptを選択します。
名付けはBallControllerとします。
これでC#のソースファイルが作れました。
Scriptsの編集
作成したBallControllerをダブルクリックします。 するとMonoDevelopというエディタが起動し、BallControllerを開いてくれます。
BallControllerの中身を見てみると、フレームワークか何かのインポートっぽい記述があって、クラスが宣言されていて、中にStart()とUpdateという関数が宣言されています。 Start()が初期化時に一回呼ばれる関数。 Update()がフレームごとに呼ばれる関数。って書いてありますね。 フレームというのはゲームやってる方でしたらおなじみの、FPS(Frame Per Second)のことです。 1秒間に何フレームあるかというやつ。パラパラマンガみたいなやつですね。
さて、ボールをコントロールしたいのでまずキーボード操作のイベントをハンドリングする必要があります。 どうするかというと以下の画像のようになります。 キーボードのWキーが押されたら、中の処理を実行します。
次に動くスピードを設定する必要があります。 これはプロパティとして書きましょう。
動かすための処理は現在位置からmovementSpeed分動かすという処理にします。 Wキーが押されている間、フレームごとにmovementSpeed分動くコードが以下になります。
同様に、Sキーを押してボールを後ろに動かすという処理は以下のコードになります。
ソースコードの編集はここまでになります。
ScriptsをBallに追加
Unityの方にもどって、Sphereを選択します。 Rigidbodyを追加した時のように、"Add Component"を押して検索欄に"Ball"まで打つとBallControllerが表示されるので、それを選択して追加します。
追加されるとこんな感じ。 ボールにBallControllerの処理が行われるようになります。
BallControllerにはmovementSpeedというプロパティが宣言されていました。 Unity上でプロパティの値を設定してやることができます。 以下の画像のように、movementSpeedの値を変更しましょう。
さあここまでやったら動かしてみましょう。 再生ボタンを押して、Wキーを押してみると...
6.完成!
ばびゅーーーん!!
まとめ
細かい説明ははしょっていますが、ヤッタネこれで物を操作できるようになったよ! きっとこれと同じような感じで、3Dのキャラとかインポートしたら走ってくれたりするようになるんだそうに違いない。(わかっていない)