見出し画像

Unityの基本を学びたかった、androidアプリ開発記録

前に投稿したように、まずは証拠?みたいな感じでURL直貼りします↓↓↓

タイトルはシンプル・ボウリング。その名の通り、シンプルにボウリングができるだけのゲームです。GooglePlayStoreに投稿しました。まあ真の暇人しかやらんでください。まともなゲーム作ろうとしてたのに、気が付いたらクソゲーになってたんで...。(´・ω・`)

作ってる序盤は神ゲー確定!!とか考えてたけど、なんかタイトルUI作ってるくらいから、雲行きが怪しくなっていった。一番酷いのは、ボウリングのピン倒した音。もういい音源がなさ過ぎて、仮みたいな感じで、よくわからないプラスチックをバインバイン落とした音を使用しています(2020年7月6日現在)。さすがにアプデして爽快感溢れる音にしたいです。あとデバックが当初想定していたよりできなかったので、ボールを投げている挙動、ボールが転がっている挙動、そしてプレイヤーカメラの部分が全くイイ感じに調整できませんでした。

まあ今まで作っていたものがゲームですらない、おぞましい"何か”だったので、”クソゲー”を作れただけ進歩と捉えていきましょう。そう、これ作ったメインの目的はよくある、"個人アプリで金儲け!!"ではなく、"Unityの大ざっばな標準機能を知ること"だったので、学べたことはたくさんありましたし、今後どうしようかなあという疑問もたくさん出てきました。と、いうわけでこれらを今から列挙していって、整理していきたいと思います。

学べたこと

・いろんなコンポーネントの取得方法があることがわかり、狙い撃ちしてGetComponetできるようになった。

UnityにはいろんなGetComponentがありました。過去の私はネットの記事を探してでてきた、this.GetComponent<hoge>()くらいしか知識がなく、さらにthisの意味さえ知らなかった過去から、thisは自分自身のクラスのインスタンスを表す(これでいいのかな?)ことを知り、例えば、あるButtonを[SerializeField]で取得して、そこについてるImageを取りたかったらButton.GetComponent<Image>()でとれたり、ということが学べた。もうこれ知らなかったころはスクリプトが乱立しすぎてて、マジでわけわかめだったもの。あと便利なのはGetComponentsInChildren<hoge>()。いっぺんに子オブジェクトとれてマジ便利。あとはtransformから、parent、root、tag検索などに派生できるのも便利!。あとやってて思ったのが、そもそもUnityのコンポーネントがほぼ全部クラスみたいなものなんだなあっていうのに気づいて、それが結構な驚きだった。

まあ後の疑問にも書くけど、こういういろんな取得できるようになったけど、そもそもオブジェクトの管理方法が素人すぎて、結局ぐちゃぐちゃっていうのが現状。

・Update関数をあまり使わなくなった。

ド素人あるあるだと思うのですけど、過去の私はそれこそ、何が何でもUpdate関数を使っていました。それこそUIとかにもUpdate関数を使っていました。Updateは便利なんですよ、だって常に実行されてる関数なんですもの。けど、UIにUpdateは意味わからないよね(´・ω・`)。使うとしたらアニメーション使ってぴょこんとだすとかかな?

・いろんな標準コンポーネントを知れた。

このアプリは独特なコンポーネントとして、Hinge Jointていうコンポーネントを使用しております。最初振り子の運動を再現するために運動方程式を書こうと思ったら、そんなものは要らなかったみたいです。さすがUnity。普段使うだろういろんなコンポーネントもコンポーネントも学べました。とりあえずTextからTextMeshProにチェンジできましたし、LayoutGroupとかもそれとなく使えるようになりましたし、AudioClipの再生方法もほんのちょっとだけ学べました。うれしい。

・DoTweenとかのTween系を今後学び、使ってみたい。

よく神アセットとして取り上げられているDoTween。やっぱりいろんな所でバチバチに使えそうなので、これから学んでいきたいですね。エフェクトとかも無いと寂しいですし。

・物理演算、使わなくていいんじゃない?

そもそも当たり判定を設定するにしても、ターゲットとの距離を測るだけでよかったりとかね。案外物理演算使ってるゲーム少ないよね。バグのもとだしなあ。

疑問になってきたこと

・どうやってゲームのスクリプト管理しよう?

もう今後の死活問題でなんもわからんのがこれです。下手にスクリプト作っても意味わからなくなるし、わかりやすく積み上げてきたつもりであった本アプリのスクリプトも、最後の方にはマジで管理が限界になってました。一番やばそうだな、って思ったのが、一つの関数にいろんな機能をつめた関数をつめるっていうことをまあやると思うのですけど、あとあと見返してみたら意図せず実行順番が重要になってしまっていて、それがもとでその関数を使用している挙動が意味不明になることです。

あと変数管理。複数のスクリプトが同じ変数を使っているときに、その内の2つだけが個別でまた別の変数を共有したい、というときがありまして、そうなるとそれぞれのスクリプトの実行順番が大事になってくるんです。ここで上の問題も出てくると、頭の中でスクリプトの実行順番をすべて把握しなければならず、最後の方には、もはや全ての関数を頭の中だけでpublicな変数の挙動も追いながら、一から実行していました。もうわけわかんないです。ふとスクリプトの管理方法を変えなきゃな、と察しました。

あと個人的に小さな機能の関数と、小さな機能をまとめた中くらいの大きさの関数と、中くらいの大きさの関数をまとめた大きな関数が何の区分けもされずに同じスクリプトにある、とかなってると非常にもどかしくなります。どうにかできないものだろうか。

ポンポン疑問は出てくるのですが、具体的な改善策は無く、シングルトンな変数を意識的に作っていけばいいのかな、とか、C#の継承システムとか使えば、似たような関数は乱立することなくなるのかなとか、abstractクラスとかprotectedっていうアクセス修飾子を学んで使っていけばいいのかなとか、いろんなことを考えてはもやもやしております。何というか所謂Unityというより、C#周りの仕様を学びたいです。まあ似たような感じでgameobjectの管理方法も知りたいわけですが...(汗)。

・どこまでをPrefab化するか

凄い迷います、もういっそのこと全部Prefab化してしまって一個のManagerでInstanceさせた方が管理しやすいような..、ゲフンゲフン。たぶんこれは裁量次第。そこまで問題なし。(後で調べる)

・プロジェクトの管理方法

このアプリは別にめんどくさいことせずに、一個のプロジェクト作って、それで完結させました。でも今後これより大きなプロジェクトを作るとなると、たぶんGitのシステムとか使って分岐したバックアップが必要になってくると思います。学ばなくては...!!

・使用している素材がResource内で乱雑になりがち

とりあえず私はScriptとImageとSEとPrefabで分けているのですが、如何せんぐっちゃぐちゃです。プロジェクトが大きくなったときが怖すぎる。カタカタ(((´・Д・`)))みなさんはどういう風に管理しているのでしょうか...??

・没になった機能をどういう風に扱おう?

これは使えない機能だなあ、けどなんか流用できそうなオブジェクトだなあ、残しておきたいな→プロジェクト、シーン内ぐちゃぐちゃ

ね。これなんとかしたいけど...多少は仕様がないのかねぇ。

・UIの設置方法が微妙にわからない

なんかいっぱい設定ありますよね、まずデフォルト、ピポット設定から中心に合わせる、左上に合わせる、全体幅に合わせる...とか。多すぎてどれが適切なのかわからんのです。UIもScript制御したいときもありますから、あとから気分で変えるわけにもいかないし...。

・わかりやすい、魅力的なUIとは??????

前からさんざん呟いていますが、何度でも言いたい。やっぱりマジで難しい。もうこれは、試行錯誤していくしかないのでしょう。頑張っていきます。


今もやもやしてるのはこんな感じ、こうしてまとめてみると管理方法が全体的にわからない感じですね。どれか一つの疑問にでも、コメントで教えて下さるととても嬉しいです。私も今後学んで答えを模索していきたいと思います(´・ω・`)。今回のアプリ制作はなかなか楽しかったな!気が向いたらアプデも考えております(気が向くときが...あるのだろうか?)。

あ、アプリ内に設置した意見箱はちゃんと機能してるのでそこからメッセージ送っていただくこともできますよ!!!!めっちゃ気軽に送ってもらって構わんです。うん〇とか適当なこと送ってくれても作者はめっちゃ嬉しいです。個人的にちょっとアツい機能です。


次はどんなアプリ作ろうかな~、じゃあ今日はここまで!

この記事が気に入ったらサポートをしてみませんか?