【Unity】キャラクターの当たり判定は円形にしておこうと思った話

楽しかった夏休みも残り三日となり、ストレスでお腹が痛くなっている子猫2000です。夏休み中にPCを新調しました。ケースと電源とグラボだけそのままで、マザボから色々総とっかえです。値段に惹かれてメモリ32GBなんてしてしまったけど、使い切れるのだろうか……?

そんなこんなで並行作業が捗るので、ここ数日ゲームの待ち時間とかに裏でUnityをチョコチョコいじっています。数年ぶりにゲーム作りしていますが、めちゃくちゃ楽しいですね。とりあえず作業時間を考えて2Dで作ってみているのですが、再現不能(というか、再現はするけど条件が全く不明)なバグに見舞われました。日本語サイトで解決策が見つけられなかったので、今後同様の症状に見舞われた方に向けて記事にしておきます。

発生したバグの症状

「勇者のくせに生意気だ」的なダンジョン管理ゲームを作ってみたいと思いまして、技術検証(という名のUnityの勉強)をしていました。Unity Asset Storeからフリーで使用できる「 Too Cube Forest, the free 2D platformer game tile set. 」という素材をお借りしてきて、左右に移動して壁に衝突したら反対方向に移動し始めるだけのキャラクターを作成しました。おおむね順調だったのですが、動かしてみると、突然キャラクターが止まって、そのまま動かなくなる事象が発生しました。

壁の間をウロチョロさせるだけのプログラム

発生タイミングもバラバラで、テストプレイ開始直後に止まることもあれば、少しの間は何の問題もなく動いていたのに、突然止まることもありました。

使用していた「Rigid Body 2D」や「Tilemap」、Script内で使用している「AddForce」などを中心に色々調べてみるも、解決策が出てきません。結局日本語で見つからないなら……と思い英語で検索して、このサイトに行きつきました。「ぉ、自分と同じ症状で質問している!!」

原因と解決策

キャラクターに「Box Collider 2D」を設定し、Rigidbody 2Dで重力をかけていた事が原因でした。詳しい事情は知りませんが、端数が悪さをして予期せぬ引っ掛かりを起こすらしいです。

当たり判定や物理計算までデフォルトで揃っている凄いUnityですが、万能ではないのでしょう(当たり前ですが)。大人しく「Circle Collider 2D」を使用するよう変更することで無事解決しました。

思えば昔ゲーム作っていた時も基本は円形で当たり判定作っていたなぁ……と、しみじみ感じたところで終わりです。