nabeliwo blog

nabeliwo blog は nabeliwo の日々の出来事だったり生活の中で感じたことだったりを雑にお届けします。

【Unity勉強】4日目:ヒヨコを大砲で撃つむごいゲームを作っている

CATEGORY:技術

TAGS:#Unity

引き続き、こちらの書籍を使って勉強をしています。

Unity2018入門 最新開発環境による簡単3D&2Dゲーム制作 - Amazon

初めてのゲームっぽいやつ

ついに2Dゲームを作りましょう的な章にやってきました。
そしてできたのがこちら。

youtube:https://www.youtube.com/embed/NdCQIvq3Oko

坂を転がってくる卵から孵りたてのヒヨコに大砲をぶち込むゲームのようです。
なんでこんなひどいことをさせるの…。

メモ

前回の失敗を活かして今回は雑にメモったのをちょっと整えるだけ。

  • 2Dゲームを作る際はプロジェクト新規作成時に2Dを選択する
    • カメラが固定され、 Z 軸の概念がなくなる
    • 2Dゲームではライトが必要ないので Scene に Directional Light はない
  • 2Dのプロジェクトの Project ウィンドウに PNG などの画像を取り込むと「スプライト」と呼ばれる素材データに自動的に置き換わる
    • Sprite Editor を立ち上げることでスプライト画像を切り分ける
    • Sprite Editor を使用するにはまずスプライトの SpriteMode を Multiple にする
      • Multiple : 1枚のデータの中に複数の画像素材がある設定
    • Sprite Editor で Slice -> Type を Automatic にする -> Slice で勝手に良い感じに切り分けてくれる
    • 四角形で切り分けられるのでスプライト画像は背景を透明にしておく必要がある
    • Apply を選択して適用できたら Sprite Editor を閉じる
  • 制作中は何が起こるかわからないので定期的に保存をしましょうって書いてあった。その通りだ…
  • 2DゲームはZ軸がないので、レイヤーという機能で描画の順番を指定して、どれが手前なのかなどを決める
    • スプライト画像には Sprite Renderer というコンポーネントが最初からアタッチされているので、それを使う
    • Order in Layer という値に数値を入れることで描画順を設定できる。値が大きいほど手前に描画される
    • ちなみに Sorting Layer という項目もあり、これはオブジェクトをグループ分けするもの
    • 同じ Sorting Layer の中で Order in Layer が大きいものを手前に描画する
  • 床に衝突判定をつける。以前学んだ Collider でいけるが、2Dの場合は2D専用の Collider がある
    • Physics 2D -> Box Collider 2D でコンポーネントを追加する
    • Polygon Collider 2D を使用すると、使用したオブジェクトの形状に合わせた当たり判定を生成できる
    • Polygon Collider 2D は形状が複雑になってしまうため、処理負荷がかかるので多用しない方がよい
  • キャラクターの操作などゲーム独自の処理は自分でスクリプトを作る必要がある
    • そのスクリプトファイルをオブジェクトにアタッチする
    • Project -> Create -> C# Script
      • Unity 2018 から JavaScript のサポートはなくなったらしい
      • 僕の大好きな JavaScript...
  • Unity ではエディタは Visual Studio を利用する
    • Visual Studio わりと書きやすい
    • 普段のウェブ開発では Visual Studio Code を使っているのでそのおかげかもしれない
    • ただいつもは mac を使っているけど今回は windows でやっているのでフォントとかがつらい。ここらへんカスタマイズしていきたい
    • 実際に書いた C# のコード、しっかり説明があるのでまあわかったがこれを自分で書けるようになるのはなかなか骨が折れそう
    • 注意 : クラス名とスクリプトファイル名は一致させること。させないと後でオブジェクトにアタッチできなくなる
  • Visual Studio 上でエラーがでまくっているのでエラーを適当に抽出してググってみるとこれが出た
    • 【Unity】2018.2に更新したら、VisualStudioでエラーが出始めた - うら干物書き
      • 怒られてるエラーが同じ感じだったので言われるがまま Visual Studio を更新してみた
      • しかしなおらない
      • ただエラーの内容が変わっていて、そこに Rider という文字があったのでそれで調べてみると Rider というエディタがあるらしい。そっち使ってみるか
      • と思ったけど Rider は JetBrains 製の IDE で有償だったのであきらめてちゃんと解決する道を模索する
    • Unity を一度落として再起動したらなおった
      • Visual Studio で色々更新して Visual Studio の再起動だけで解決すると思っていたがそうではなくて Unity も再起動しなきゃいけなかったらしい
      • よかった
  • Prefab という仕組み
    • オブジェクトをスタンプのように複製して簡単に量産を可能にする Unity の機能のこと
    • 今回は砲弾をプレハブ化する
    • Project -> Create -> Prefab と書いてあったが、 Prefab がない・・・
      • 代わりに Prefab Variant というのがあるが、グレーアウトされて選択できないようになっていた
      • この本は Unity 2018 の本で、今使っている Unity のバージョンは 2019 なので変わっているのかも
      • どうやら、 Unity 2018.3 より前はまずは Project で Prefab を作成してからそこに Hierarchy にあるオブジェクトをドラッグ&ドロップすることでプレハブ化していたようだが、2018.3以降は Hierarchy にあるオブジェクトを直接 Project にドラッグ&ドロップすることでプレハブ化されるようになったらしい
    • プレハブから生成されたオブジェクトを「インスタンス」と呼ぶ
    • インスタンスはスクリプトからも生成できる
  • スクリプトで GameObject や Transform の型で宣言した値には、 Inspector からプレハブをアタッチする

こんな感じで色々やってたら2Dゲームが完成しました。

前回の疑問の調査

Physic Material の Static Friction の話

前回疑問に思ったこととして、 Phisic Material の Static Friction の「静止した状態の摩擦係数」というのがよくわからなかったので調べてみました。
どうやら止まっているこの値を大きくすると止まっている状態のオブジェクトを動かすために必要な力がより多く必要になる、みたいな感じでした。納得。

今回の疑問

特になし。

感想

ついにゲームっぽいものを作りました。
ゲームっぽいものとは言え、ヒヨコに大砲の弾を当てたところでポイントもないし目的もないし、ゲームっぽい UI があるわけでもないので本当にゲームっぽいかと言ったらうーんという感じなのですが、とりあえずキーボードで操作して色々できるものは作れたので嬉しいですね。
次回は UI を作るっていう章になるみたいなので楽しみ。

あとは C# のコードを書けたのも良かった。
C# 初体験なので言語自体の勉強もしっかりやっていくぞ〜〜。おわり。