愛だけでゲームを作るよ!

アクツクMVでゲームを作ってます。_(:3 」∠)_

【自作ゲーム】愛だけでキャラが引っかかる問題に対応するよ!【ロックマンX】

今期のアニメは「甘々と稲妻」がお気に入りです。
1話目から涙腺にダイレクトアタックでした。

各話にグッとくる場面がどこかにあって、表情の変化を見てるだけで面白いです。

娘のつむぎちゃんの声優さんが、10歳の子役だそうです。_(:3 」∠)_
「あー、この演技は大人には難しいかもなぁ」と思いながら見ています。

原作は読んでいたのですが、個人的にとてもキャラに合った声だと思いますよ!
これからこの作品でどんな演技をしてくれるのか、楽しみですね!


おはこんにちわ、ととすけです。_(:3 」∠)_
さて、さっそく最近の状況です!


今どんな感じなのさ?


今はキャラの動きで気になる部分を修正しているところです。
最初は勢いでザーッと組んで、”とりあえず動く”という状態だったのですが…。

Unityの理解が進むにつれて「気になる部分はすぐ修正!」と考えるようになり、早めに手直しをするようにしています。

バグ管理表を作る程の規模でもないですしね!
誤った覚え方とか変な癖とか、少しでもそういった要因を無くすのが狙いです。(´・ω・`)


事の発端はダッシュ処理を作っているときでした。
キャラが移動する時、時々引っかかる感じがするんですよね。

これは歩いているときもダッシュのときも、壁をゆっくり降りる時にも発生するんです。
原因を探ってみると、どうやら「当たり判定」と「ステージの作り」に問題があるようでした。

今回のブログでは、キャラの当たり判定とステージについて書いてみようと思います。



何で引っかかるのさ?


うーん…何ででしょう…?

調べてみたところ、この問題に直面したことがある方を何人か見かけました。
実はわたしが知らないだけで、Unityあるあるだったり…??

じっくり検証したいところですが、わたしはゲームを作ることに時間を使いたい!
なので、今回は「どうしたら回避できるか」だけを考えることにしました。_(:3 」∠)_


では、一つずつ説明します。
まずは当たり判定についてですね。


<当たり判定の話>

Unityでは当たり判定(以下、コライダー)を駆使して、キャラを歩かせたり、ジャンプさせたり、ダメージ処理をしたりしています。

この緑色の枠がそうです。




コライダーの形にはいくつかの種類があり、それらを複数組み合わせて指定することも可能です。
Unityのチュートリアルを見ていると、コライダーをこのように四角と丸の二つを組み合わせて説明していることが多いです。




下を丸いコライダーにすることで、ステージ上の小さなデコボコや坂道をスムーズに進めるようになる…のだと思います。

しかしこの丸いコライダーにもちょっと問題がありまして、こんな感じで端っこに立つと、ズリズリと下に落ちていくんですよね。




今わたしが作ろうとしているゲームは、ボスとひたすら戦うぞーというものです。
なので、こういった隅っこに立つような状況にはならないはず…と最初は思っていました。

ですがよくよく考えてみると、X2のシグマステージ・カウンターハンター戦や、X1のシグマ戦では特殊な足場に乗って戦っているんですよね。

さすがに足場からズリ落ちるのはマズイので、わたしは長方形のコライダーのみになっています。




これでずり落ちる心配は無くなったのですが…
どうやらこの形状、設置したステージとの相性が悪かったようです。


<ステージの話>

SFC版のロックマンXのステージについて、自分なりにですが色々と調べてみました。
恐らくですが、このような16x16のドット絵を組み合わせてステージを形成していると思われます。




わたしがUnityでステージを作成する際も、ある程度ステージパーツを固めて用意して、それをマリオメーカーのように配置していっています。

ステージオブジェクト配置させる際、「Ctrl+V」キーでオブジェクト同士を吸着させる機能を使用するため、オブジェクト間の隙間は無いものと思っていました。

思って…ました…。(´・ω・`)


このように、見た目はきれいに並んでいるオブジェクトですが、つなぎ目に極々僅かなズレが生じるようです。




…で、そこに長方形のコライダーが通過しようとすると、そのズレを検知して「目の前に障害物がある」と認識してキャラが立ち止まってしまう…とのこと。

今までスムーズに進むことができていたのは、たまたま進行の妨げにならないズレ方だったのでしょう。
…ちゃんとした検証はしていませんけど、今回はそういうことにして納得しています。

うーん。それにしても、Unity内部で何が起こってるのでしょうね。
少しモヤモヤしますのん…。(´・ω・`)


<対処内容の話>

ということで、細かくパーツを配置する方法をやめて、予めステージの形を作ってからUnityに取り込むことにしました。

地面ドーン!壁ドーン!天井ドーン!といった感じで、大きなパーツを配置します。(ドーン)


設置オブジェクトの数が少なくなるので、Unity上での管理も楽になるかもしれません。
ただ、大きなオブジェクトを配置しているので、処理や読み込みに負荷がかからないのかな?と、少し不安ではあります…。(´・ω・`)

今のところ、引っかかることは回避できています。そう、今のところ。
しばらくこれで様子見ですわん。_(:3 」∠)_


うーん…でもやっぱり、先ほどのコライダーを四角と丸で設定するのがスマートなのかしら?
ずり落ちてしまうのをプログラムで制御できれば、いけるかもしれませんね。

例えば、足元に地面との接触判定をするセンサー(レイキャスト)を複数配置して、エックスの状態を正確に判断できるようにする。
そして端っこに立ったときの条件処理を組み込んで、ずり落ちないよう制御する…みたいな?


ちなみにレイキャストとは、見えないセンサーのようなものを指定方向に飛ばし、センサーにヒットすれば"true"を返すというものです。(センサーの見える化も可能っぽいです。)

センサーの開始位置や距離も自由に指定できるため、壁や地面の接触判定も簡単に取得することが可能です。
わたしは空中判定と、壁の接触判定にレイキャストを使用しています。

使える場面は多々あると思いますので、使いこなせるようになりたい機能の一つですね。



最後に


ダッシュはあともう少しで完成しそうな感じです。
アニメーションが上手く遷移してくれなくて、試行錯誤が続いてますけど…。

それでも、最初の頃よりいい感じにダッシュしてくれるようになりました。


壁蹴りも壁を認識して蹴ってくれるところまではいったのですが、壁に捕まった瞬間からズリズリと落ちてしまうので、捕まった瞬間は少し留まるように調整中です。

早く完成させて、ニヤニヤしたいなぁ。_(:3 」∠)_


さて、「作るぞー!」と意気込んで半年が経ちますが、最近は特にUnityについて理解が深まってきました。
まだまだ知らない機能やテクニックがてんこ盛りですが、一喜一憂しつつも楽しく作ってます。

年内にミニゲームを完成させて、新年からは作りたかったゲームに着手する予定です。
8月中にエックスの基本アクションが出来上がってたら嬉しいなぁ。(´・ω・`)


そういえば、わたしの作っているゲームは「クローンゲーム」と言うカテゴリに入るそうです。
ずっと2次創作的なカテゴリに入ると思っていたのですが、ちゃんとそういう言葉があったのですね!

知らなかったです…。
とまぁ、今回はこの辺で。


ではでは、また次回のブログでお会いしませう!
しーゆー_(:3 」∠)_