まったりするmatayu

ツイートにゴミがついた感じのブログ

初めてのUnity

前々から気になっていたUnityを触ってみようと思う.(備忘録的な作業メモだから文脈が切れてる)

ダウンロードはもうしてある.こちらの記事を参考に遊んでみようと思う.

xr-hub.com

 

Unityにはasset store なるものがあって,3Dオブジェクトを自分で作れなくてもある程度遊べそう.ここでUnityちゃんをダウンロードしてimport.

assetstore.unity.com

 

Unityちゃんの召喚に成功した!!しかもこれ最初から矢印キーで動かせるのか!

すげぇ...

f:id:mattari_matayu:20200511121149p:plain

初Unityちゃん

プレハブ?と言う概念があるらしいが,とりあえず今は飛ばす.

 

次はゴールオブジェクトを作るのか.

クラス名が間違っていたために,Goalオブジェクトにスクリプトをアタッチできなかった.クラス名を修正することで解決(ファイル名と同じにした).

そこからいろいろ記事通りにやって,第一部完了. ここまでの感じだとSwiftよりも簡単かも? Unity入門の記事を書いてる人の誘導がうまいからってのもあるかもしれない.

 さてそのまま第2部へ.

まずは障害物の作成.

さっきクラス名が間違っていて進まなかったから,今度は作成後しっかり確認.

またプレハブという言葉が出てきた.プレハブ化するとそのオブジェクトは使い回しができるようになるらしい.プレハブはプレハブ化した時点のものが記録される(当たり前っちゃ当たり前だけど).

違う動きをさせたい別のオブジェクトを操作するスクリプトは分けて書く必要がある(これも当たり前).

ここで,当たったらゲームオーバーするDeadWallオブジェクトが動いてくれないという問題が発生.

Wallオブジェクトのプレハブを使用してDeadWallオブジェクトを作成したがその時,Controllerを新しく作ってアタッチして引き継いだ方をそのままにしてしまったのが悪かった.

 

Wallから引き継いだControllerと新たに作成したControllerが同時に存在してしまい,さらにスピードの値が真反対という奇跡のような偶然によりDeadWallオブジェクトは動かなくなってしまった.解決方法は簡単で,引き継いだControllerをデアタッチ(この言い方合ってる?)することにより解決.

f:id:mattari_matayu:20200511161128p:plain

動かなくなってしまったDeadWall君

次は制限時間の作成.

これは簡単だった.ただ,空のオブジェクトにスクリプトをアタッチして動かすことができるのは面白かった.

 

次はコードをクラスで分ける.

Swiftでやった時と同じ感じだな.該当部分を切り分けていく作業.(本当は最初からクラス分けされてた方がいいよな. それとも必要に応じて切り分けていく方が無駄にクラスが増えなくて良い?)

ゲームオーバーやゴール,リスタートの処理を一つのクラスにまとめてやった.

 

次は落下したときの処理.

ここでも空のオブジェクトが出てきた.概念的なもの(時間,判定)を実装するときは空のオブジェクトが出てくる感じやな.とりあえずここもすぐにできた.

f:id:mattari_matayu:20200511171133p:plain

垂直体勢を保ちながら落下していくUnityちゃん

次は追跡してくる敵の作成.

なんと!勝手に追いかけてくるAI(ナビゲーションシステム)がUnityには備わっている! 盛り沢山だな.果たしてUnityの標準装備から抜け出す日は来るのだろうか.それはともかく便利なものはどんどん使おう.このAIの機能使えばプレイヤーについてくるペット的なのを簡単に作れそう. 夢が広がる機能だな.

 

物理的な接触を避けたいときにIsTriggerをオンにするのか.IsTriggerって結局なんなん.べつの記事でまとめよう.

敵が壁を避けるようにWallオブジェクトとDeadWallオブジェクトにObstacleコンポーネント(コンポーネントって見えないオブジェクトみたいな認識であってるだろうか)をアタッチした.Prefabさえ編集すればすでにシーンに配置されているオブジェクトにも変更が適用されるが,シーンに配置しているオブジェクトのPrefabをUnpackしてしまうとそれがないから,配置したものは理由がない限りPrefabのままにしておく方がよさそう.

 

Goalした後もenemyが動き続けて,接触したらgameoverになってしまうから,enemyを非アクティブ化しないといけないとのこと.textをアクティブ化することを前にやったからそれと逆のことをenemyに対してやればいいんだな.一応非アクティブ化の方法を調べた.

marunouchi-tech.i-studio.co.jp

これで追跡してくる敵の作成は終了.このUnity入門めっちゃ楽しいし面白い.

 ささ,続けて第3部.

この部はデザインとか見た目をいじる感じかな.ユーザーに寄り添う感じの部.割と一番大事なところだったりする? 

 

まずは背景を設定する.

背景の素材はasset storeから持ってくる.ちょっとダウンロードしてる間にskyboxという概念を学ぶ.skyboxはいわゆる背景らしい.ただ普通の背景と違って,環境光も一緒に変更できる.asset storeから夜のskyboxをimportして使えば夜っぽい環境光になるといった具合.光の調節がいらない(自作でなければ)から楽.

この辺りでダウンロード終わりそうだから,skyboxについてはまた違う記事で.

おお,宇宙空間に浮かんでる感じになった.簡単だった.

f:id:mattari_matayu:20200511185232p:plain

宇宙に浮かぶ板

次はそれぞれのオブジェクトをいい感じにしていく.

まずはフィールドを半透明にする.シェーダーというものを使う.シェーダーはまた別で知識が必要そうだからあとで次の記事を参考にして作るまでやりたい.

nn-hokuson.hatenablog.com

nn-hokuson.hatenablog.com

今回はとりあえずコピペ.

おお,半透明になった.いい感じ.

f:id:mattari_matayu:20200511190328p:plain

フィールドが半透明になった!

そのあとちょっと色を変えて明るさの調節などした.

次はenemyを円柱ではなくスポットライトにする.かっこいいな.

Mesh Rendererをoffにするとオブジェクトが見えなくなる.そこにスポットライトのオブジェクトを追加してやれば出来そうだな.は?スポットライトも標準装備? すげえな.

intensityってのは光の強さかな.スポットライト難しいかなと思ったがこれもあっさり終わった.

f:id:mattari_matayu:20200511195212p:plain

敵とゴールがスポットライトに変わった!

最後にスタート画面を作る.

スタート画面に使うUnityちゃんの画像をダウンロードする.Unityちゃんの画像は公式でダウンロードできるようだ.すごい,いろんなUnityちゃんが入ってる!

unity-chan.com

importしたUnityちゃんの画像を使えるように,スプライト化するらしい.スプライト化ってなんだ.また今度調べよう.

とりあえずスタート画面ぽいのできた.

f:id:mattari_matayu:20200511201820p:plain

スタート画面

これにシーン遷移のスクリプトを書き込めばオッケーかな.

新しい画面が出てきた「ビルドセッティング」.ここにシーンを追加することで画面遷移に組み込むことができるのか.

なんだかんだで完成!

カメラの配置とかまだ分からないことは山のようにあるが,楽しかった!