ちょっと話題の記事

【はじめてのUnity】第一回:ボールを操作する

2016.04.30

次回:【はじめてのUnity】第二回:ボールを右折左折させる >

おばんです、田中です。
4月から始まった案件がちょうど一ヶ月経って激化してくる頃合いではないでしょうか、されども世間はGW。
僕はちゃんと休みが取れました、ヤッタ!!

ということで新しいことを始めてみようと思い、Unityやっていきます。

はじめに

僕は基本的にiOS畑でしか生きてこなかったのですが、そろそろ新しいサブスキル的なものを欲しくなってきたのでUnityやってみようかなという感じです。
ですのであまり深い内容にはならないかもしれませんが、逆にそれを活かして僕のような初心者にもわかりやすいように画像・動画多めで書いていきます。

第一回は「とりあえず動くとテンションあがる!」
のでボールを動かしていきましょう。

1.プロジェクトの作成

インストール、初期セッティングが終わった状態でUnityを起動します。
起動して、以前にプロジェクトを作成した場合は以下の画面になります。

1

他の画面等で開いてしまった場合は、ナビゲーションバーのFileから"New Project"を選択しましょう。

0_5

すると以下のような画面になるので、Project Nameとプロジェクトを置くディレクトリを選択して"Create Project"を押しましょう。
なお、今回は3Dを選択します。

2

プロジェクトを作成すると以下のような画面になると思います。

3

layout変更

もし別な画面、インスペクタやウィンドウの表示が画像と違う場合、Layoutを2:3に変更してください。
ここは好みもあると思いますので、お好きなLayoutで進めていただいても構いません。

4layout

2.オブジェクトの追加・編集

次に3Dオブジェクトの追加を行っていきます。

planeの追加

Hierarchy -> Create -> 3D Object -> Plane と選択して、ボールが動くフィールドを生成します。

5addplane

6addedplane

カメラの操作

さてオブジェクトを生成しましたが、そうなると視界を動かして、角度を変えて見ていきたいとなります。
画面左上の手のマークを押します。

7hand

そうすると、カーソルが手のマークに切り替わり、Sceneの中でドラッグすることで視界を動かすことができます。
拡大縮小はホイールを動かすことで操作でき、角度の変更はAltを押しながらドラッグするとできます。

sphereの追加

操作対象となるボールを追加しましょう。
Planeの時同様、Hierarchy -> Create -> 3D Object -> Sphereと選択していきます。

8addsphere

するとこんな風にボールが生成されます。

9addedsphere

オブジェクトの移動

変なところに浮いてるので、座標を全て0にします。

10座標を0に

すると今度はフィールドにめり込むので、Y座標を少し高く、0.55としましょう。

11微妙に浮かす

この時0.55とすると、フィールドから少し浮いた状態になります。
フィールドとぴったりなところはおそらく0.5のY座標ですが、あとで変なめり込みとかが起こると嫌なのでとりあえず0.55としておきます。

12微妙に浮いてる

カメラの移動

画面左下の"Game"ウィンドウをみてください。
これが実際にゲームを再生した時に見える視点になるのですが、オブジェクトと若干距離を感じます。
カメラを移動して近づけてみましょう。

HierarchyのMain Cameraを選択します

15selectcamera

その状態で画面左上の十字矢印マークを押します。
すると選択しているカメラに三本の色のついた矢印が現れます。

16tomovecamera

三本の矢印がそれぞれカメラのX, Y, Z座標を移動するための矢印で、矢印をドラッグ&ドロップすることによってカメラの位置を動かすことができます。
動かすと、それに追随して画面左下のGameウィンドウも動くと思いますので、それを見ながらカメラをちょうど良い位置に動かしてみましょう。

17movedcamera

rigidbodyの追加

さて、ここまでだとただ球状のオブジェクトが生成されているだけの状態となります。
再生ボタンを押すとボールは空間に浮いたままの状態となるでしょう。

今後ボールがぶつかったり、フィールドの上で重力を元に動くには物理を適応させる必要があります。
そこで追加するのがRigidbodyコンポーネント。
Sphereを選択した状態で"Add Component"を押し、検索欄に"Rigi"くらいまで入力すると候補に"Rigidbody"が表示されるので、それを選択します。

13addrigidbodytosphere

こうすることで、SphereにRigidbodyを追加し物理を適応させることができました。

14addedrigidbodytosphere

3.保存の仕方

いろいろやってきました!
そろそろ保存しないとヤバいんじゃないかと怖くなってきたので保存をしましょう!
Unityを選択した状態でCommand + Sを押しましょう。
すると以下のような画面が表示されます。

18save

Sceneってなんだよ、どこに保存すれば!?
とiOSしか知らない僕は一瞬パニックになりましたが、Sceneは今編集している画面。
iOSでいうと、Storyboardの一画面と考えると良さそうかと思います。
保存場所はAssetsの中でとりあえず大丈夫です。
保存するとAssetsフォルダの中にUnityマークでSceneが保存されました。

19saved

保存完了!

4.Rigidbodyの確認

若干前後はしてしまいましたが、先ほど追加したRigidbodyを確認してみましょう。
先ほどSphereのpositionのY座標を0.55としましたが、わかりやすいように1としてみましょう。

20fixPosition

するとボールがよりフィールドから浮きました。
この状態でUnityの再生ボタンを押すと...

21sureRigidbody

ボールがスッと落ちてきてフィールドに着地するのがわかります。
Rigidbodyが正しく反映されて、重力がボールに加わったので落ちてきたんですね。
この後、SphereのY座標は1のままでも0.55に戻してもらっても構いません。

5.Scriptの追加・編集

コードだ!コード書くぞ!
Unityやってるとほぼコードを書かないで、なによりUnityの使い方が大変だとか思ってましたが案外コードも書くようです。

まずProject -> Create -> Folderといき、Scriptを入れるためのフォルダを作ります。

22addFolder

名前をScriptsと名付けましょう。

23nameScripts

このフォルダにソースファイルを追加していきます。

Scriptsフォルダの作成

先ほど作成したScriptsフォルダを選択した状態でProject -> Create -> C# Scriptを選択します。

24addScript

名付けはBallControllerとします。

25nameBallController

これでC#のソースファイルが作れました。

Scriptsの編集

作成したBallControllerをダブルクリックします。
するとMonoDevelopというエディタが起動し、BallControllerを開いてくれます。

26OpenBallController

BallControllerの中身を見てみると、フレームワークか何かのインポートっぽい記述があって、クラスが宣言されていて、中にStart()とUpdateという関数が宣言されています。
Start()が初期化時に一回呼ばれる関数。
Update()がフレームごとに呼ばれる関数。って書いてありますね。
フレームというのはゲームやってる方でしたらおなじみの、FPS(Frame Per Second)のことです。
1秒間に何フレームあるかというやつ。パラパラマンガみたいなやつですね。

さて、ボールをコントロールしたいのでまずキーボード操作のイベントをハンドリングする必要があります。
どうするかというと以下の画像のようになります。
キーボードのWキーが押されたら、中の処理を実行します。

27KeyDownHandling

次に動くスピードを設定する必要があります。
これはプロパティとして書きましょう。

28addProperty

動かすための処理は現在位置からmovementSpeed分動かすという処理にします。
Wキーが押されている間、フレームごとにmovementSpeed分動くコードが以下になります。

29addMoving

同様に、Sキーを押してボールを後ろに動かすという処理は以下のコードになります。

Homework

ソースコードの編集はここまでになります。

ScriptsをBallに追加

Unityの方にもどって、Sphereを選択します。
Rigidbodyを追加した時のように、"Add Component"を押して検索欄に"Ball"まで打つとBallControllerが表示されるので、それを選択して追加します。

30スクリプト追加

追加されるとこんな感じ。
ボールにBallControllerの処理が行われるようになります。

31スクリプト追加後

BallControllerにはmovementSpeedというプロパティが宣言されていました。
Unity上でプロパティの値を設定してやることができます。
以下の画像のように、movementSpeedの値を変更しましょう。

32ChangeMovementSpeed

さあここまでやったら動かしてみましょう。
再生ボタンを押して、Wキーを押してみると...

6.完成!

ばびゅーーーん!!

まとめ

細かい説明ははしょっていますが、ヤッタネこれで物を操作できるようになったよ!
きっとこれと同じような感じで、3Dのキャラとかインポートしたら走ってくれたりするようになるんだそうに違いない。(わかっていない)