こちらのUnity初心者日記は、現在ゲーム作り勉強中の私が、初心者目線で学んだことを忘れないための備忘録として更新していきます。そのため、同じくUnityを使い始めた(使おうと考えている)初心者さんにとっても、読みやすいものになると思います。たぶん。
とはいえ、自分しか見ないノートみたいな感覚で書いていきますので、だいぶ砕けた言葉で書いていきます。そこんとこよろしくお願いします。
「ブロック崩しを作りたい!」は、今のところUnity編、インスペクター編、スクリプト編の3本立てで行こうと考えています。もしかしたら減るかもしんないし増えるかもしんない。なるべくわかりやすいような編成にしたいとは思ってます。
オブジェクトを設置しよう!
まずはオブジェクトを設置しなければ話になりません。画面右側上、Hierarchyという文字の下にある+をクリックすると、プルダウンが出てきて、いろいろなオブジェクトを選択して生成できます。
- Create Empty → Emptyは形を持たないオブジェクトです。目には見えないし当たり判定もありませんl。シーン全体に影響するスクリプトをアタッチしたり、オブジェクトのスポーン位置に使ったりできる。
- 3D Object → 3Dのゲームで使うための、簡単な形のオブジェクトです。Cube(立方体)、Spehere(球)、Capsule(カプセル型)、Cylinder(円柱)、Plane(床みたいな感じ 薄っぺらい)、Quad(壁みたいな感じ 薄っぺらい)
- UI → 図形ではないオブジェクトです。文字とかボタンとか。よく使うのはText – TextMeshPro(文字を表示できる)です。文字以外は私もまだあまり使ったことがありません。
ヒエラルキーのオブジェクトを選択すれば、矢印や青色の四角がでてきます。それをいじればオブジェクトを移動できますよ。また、インスペクター内のTransformの中のPositionに数字を直打ちしても移動します。
ちなみにTextMeshProで生成した文字と、他のオブジェクトでは、画面に映る仕組みが違います。普通のオブジェクトは、シーン上にあるカメラ(最初からあるのはMain Cameraという名前)で撮られているような状態でゲーム画面にも映ります。
しかし、文字は全く違う場所に生成されます。Sceneビューを超引きで見てもらえると、クソでかい文字と白い枠が見えると思います。白い枠が画面の外枠だと思ってください。カメラとの相対的な位置関係で映り方が変わるのではなく、カメラのレンズに直接文字を貼り付けるようにイメージです。カメラがどっちを向こうと、どこにあろうと文字の位置は固定です。
ブロック崩しで私が使ったのはこれくらいです。省エネですね。
オブジェクトにコンポーネントをアタッチしよう!
コンポーネントとは、Unityが準備してくれてる超便利スクリプトです。例えば当たり判定を付ける、重力の影響を受けるようにするなど、よく使うけど自分で書くのは超めんどいスクリプトをすでに準備してくれてるわけです。ありがとうUnity。
- Rigidbody → オブジェクトが重力の影響を受けるようにできる。
- なんちゃらCollider → 当たり判定です。Box Collider、Sphere Colliderなど、いろいろな形があります。
よく使うのはこのふたつです。まじでめっちゃ使います。超便利。ブロック崩しくらいならこれで十分。Inspectorの中の数字やチェックボックスなど詳しいことは、長くなるのでインスペクター編で書きます。
オブジェクトを思い通りに動かそう!
C#のスクリプト(人間が理解できる形のプログラム)を書き、それをオブジェクトにアタッチする(くっつける)と、スクリプト通りにオブジェクトを動かしたり、消したり、生成したり、何でもできる。逆にスクリプトはオブジェクトにアタッチしないと何も動かないから、ちゃんとアタッチしような! アイテムは装備しなきゃ意味ないのと一緒だぞ!
C#のスクリプトを生成するには、Assets内で右クリック、CreateからC# Scriptを選びます。生成出来たらまだEnterを押さず、まず名前を書き替えてください。一度決定するとスクリプトの中に名前が書きこまれてしまうので、変更するのがややめんどくさいです。
そして、ダブルクリックでC#を開きます。スクリプトにいろいろ書き(これはスクリプト編で)、しっかり変更を保存してください。アタッチするときは、アセットの中のスクリプトを、ヒエラルキーの中のオブジェクトにドラッグアンドドロップするだけ。オブジェクトのインスペクター欄にC#スクリプトがあればアタッチ成功です!
その他のアセットを生成しよう!
先ほどC#スクリプトを生成した要領で、いろいろなものを生成できます。まずは右クリックからCreateを選んでください。
- Scene → 新しいシーンを生成します。例えば、タイトル画面、ゲーム画面、クリア画面を全く別の画面にしたいときは、シーンと呼ばれるゲーム内の世界そのものを丸ごと切り替えると楽です。そういうときにはシーンを複数用意して、それを行ったり来たりするのですが、シーンを切り替えるときにはしっかりシーンを保存しましょう。世界が消し飛びます。
- Material → オブジェクトの色や質感といった見た目を決められます。赤色にしたり青色にしたり、つるつるにしたりキラキラにしたりできます。これもオブジェクトにアタッチして使いましょう
- Physic Material → オブジェクトの摩擦や弾性など、物理的な動きにまつわる設定をできます。バウンドさせたり氷みたいにつるーんと動くようにしたりできます。
あとは、画像やフォントを外部から引っ張ってきたいときは、Unity内のAssetsに直接ドラッグアンドドロップしましょう。
また、同じオブジェクトを大量生産したいときは、プレハブというものを作ります。ヒエラルキーの中のプレハブ化したいオブジェクトを、アセット内にドラッグアンドドロップします。すると、アセット内にオブジェクトが生まれます。これがプレハブ化です。
プレハブ化したやつをシーンビューやヒエラルキーにドラッグアンドドロップすると、まったく同じ物体が生成され続けます。これで無限増殖が可能です。
親子関係を結ぼう!
これとこれはセットで動くようにしたいんだよなぁ、ということがあると思います。ヨッシーにマリオを乗せた後、ヨッシーだけ動いて、座った状態のマリオが空中に置き去りになったら困りますよね。そういうときには親子関係を結びます。
やることは簡単で、ヒエラルキーの中の子ども(くっついて回る側)のオブジェクトの名前をドラッグし、親(くっつかれる側)のオブジェクトの名前の上でドロップします。すると子が親の名前の下に、先頭一文字空けでくっつきます。これで親子関係成立です。親が動けば子も動くようになります。
親子関係を結んだ後は、子のPositionは親との相対的な位置(親の場所が0,0,0)になりますのでご注意ください。
スクリプトで親子関係を結んだり、縁切りしたりということもできます。それもスクリプト編で書こうかなと思ってます。また、「オブジェクトを設置しよう!」で書いてTextMeshProは、生成した瞬間から親子関係が結ばれた状態です。なぜかはわかりません。
以上の知識があればとりあえずゲーム画面は作れます。何も動かないハリボテですが、とりあえずゲームっぽい見た目にはなりますので、あとはインスペクターをいじり、スクリプトを書けば動いてくれます。まあここからが本番なんですけどね。はは。

コメント