【Unity】バグが出た場所と根本原因は遠いこともあります【C#】
バグが見つかった部分の処理を直しても、再度同じようなバグが見つかることがあります。これは根本原因までたどり着いていないことからバグが再度発生しちゃう可能性があるんですよね。バグの発生原因を論理的に説明できるようになると根本原因を見つけやすくなるので、なぜこのバグが発生しているのかを深掘りして原因を考えることも大切です。
あなたのゲームをいち早く完成させるための研究所
バグが見つかった部分の処理を直しても、再度同じようなバグが見つかることがあります。これは根本原因までたどり着いていないことからバグが再度発生しちゃう可能性があるんですよね。バグの発生原因を論理的に説明できるようになると根本原因を見つけやすくなるので、なぜこのバグが発生しているのかを深掘りして原因を考えることも大切です。
バグが発生した、あるいはバグが発生すると報告を受けた場合は、そのバグの再現方法を見つけることが大切です。どのような状況で、どのような手順でバグが発生するのかが明確になれば解決方法を見つけやすくなります。再現方法を見つける際にはいくつか仮説を立てて検証していくと絞り込みができます。
Editor拡張を使って自分が使いやすいようにカスタマイズしたウィンドウを作ることができます。例えば自分で作成したScriptableObjectのデータを一覧表示するなどのカスタマイズが便利かもしれません。ここでは簡単にウィンドウを表示するサンプルを紹介しています。
プログラムがエラーの情報を出してくれるということは、直すための手がかりがあるということです。なので、エラーを検知して、検知した結果システム的に回復可能ならエラーハンドリングのための処理を行う、無理ならエラーの状況を人間が検知できるようにする、といったことを考えておく必要があります。
最初に作った「SceneManager」や「PlayerController」やらのクラスにどんどん機能を追加していってしまうのは多くの人が経験したことがあるんじゃないでしょうかね。クラスが肥大化すると読みにくくなってメンテナンスが大変なので、適切に分割することを考えましょう。
ゲーム作りもシステム開発の一環なのでテストが大切です。ユーザーさんに遊んでもらう時にはなるべく快適に遊んでもらいたいですからね。ただ個人開発でテストが大変であるのも事実なので、その理由と対応策を考えてまとめています。
うぬらに伝えねばならぬ。スプライトを表示する場合はレイヤーをマスターせよと。※本文中は現代的な文章でUnityのレイヤーについて簡単に紹介・解説を行っておりますのでご安心ください。
C#でエディタの機能を拡張するスクリプトを書くことによって、Unityエディタのデフォルト機能に加えて自分が欲しい機能を追加することができます。自分がよく使う機能を作っておくと、開発が捗るので挑戦してみるのもおすすめ。
Unityでよく使うVector3型や、関連するVector2型、Vector4型などに最初は戸惑いました。このページではこれらの型について簡単に紹介し、どのような場面で使えるのかについても紹介したいと思います。初心者向け。
ゲームオブジェクトの位置を変えようと思って、transform.positionを変数に代入することがあります。初心者の頃はこの代入した変数の値を変更すればゲームオブジェクトの位置が変わると思っていましたが、そうはならないんですよね。ここで注目したいのは参照型と値型の違いです。
UnityでAndroid向けにビルドしたアプリをAndroid11(APIレベル30)の環境で実行するとクラッシュすることがあった件について事象と解決方法を記載しました。このアプリではUnityAdsを使っていたので、UnityAdsのバージョンをアップデートすることで解決しました。
このページでは『Ariadne - 3D Dungeon Maker』という3DダンジョンRPGのダンジョン部分を作れるアセットについて、イベントをカスタマイズしていく部分について紹介しています。イベントを自由にカスタマイズしてあなただけのダンジョンを作り上げましょう。
このページでは3DダンジョンRPGのダンジョン部分を作ることができるニッチなアセット『Ariadne - 3D Dungeon Maker』でダンジョン内のイベントをどのように制御しているかを紹介しています。3DダンジョンRPGではダンジョン内のイベントも魅力的にしたいところです。
このページでは3DダンジョンRPGのダンジョン部分を作ることができるEditor拡張系アセットの『Ariadne - 3D Dungeon Maker』について、マップの情報を保持している仕組みについて紹介しています。データの持ち方は頭を使いますが開発者的には楽しい部分ですね。
3DダンジョンRPGのダンジョン部分を作ることができるEditor拡張系アセットの『Ariadne - 3D Dungeon Maker』を1.5.0にアップデートしたのでその変更点を紹介しています。
Dictionaryの中身についてforeachを使おうとして「あれ? 型の指定どうするの?」と詰まった個人的な経験から、Dictionaryについてまとめてみました。キーと値のペアであるKeyValuePairというまんまなクラスがあるのでこれを使うべし。
UnityでC#を使い始めて一番最初にぶつかった壁がジェネリックだった記憶があります。きちんと理解すると心強い味方になりますし、プログラミングの負担が減るのでぜひマスターしたい機能です。特にジェネリックリストは一度使い始めると手放せなくなりますからね。
個人的にはListを使うことが多いのですが、Listと配列の違いを意識してどちらを使うのか決めるのが大切です。ポイントは「要素数を後から変えるか」「パフォーマンスを重視するか」ですね。複数の値をまとめて扱いたいケースは多いので、是非ともマスターしたいところ。
C#で使っている型名のintやfloatは実は本名じゃなくてエイリアス(別名)なんです。これを知っていること自体は「ふーん」で終わるのですが、C#が使っているフレームワークである.NET Frameworkにも目を向けてみることでより情報を得やすくなるかもしれません。
C#でコードを書いた結果、重い処理になっているなーと気になったらProfiler(プロファイラー)を使ってみましょう。CPUの処理時間だったり、メモリの使用量だったりをグラフ化して表示してくれます。パフォーマンス調整もしやすくなるのでぜひ。