Developer

【Unity実践】#24 番外編 ~ 不具合の修正 ~【Boxゲーム】
2021.07.30
Lv2

【Unity実践】#24 番外編 ~ 不具合の修正 ~【Boxゲーム】

今回の内容

今回からは番外編ということで、やり残した箇所や実務的な内容を紹介します。
まずは前回作成したドラゴン周りの不具合を修正したいと思います。

※初めての方はこちらから
【第1回記事】この連載について

課題の整理

前回作成したドラゴンについて、以下の大きめの不具合が1つあります。

ドラゴンがトラップに触れても消滅しないことがある

毎回発生するわけではなく、特定のタイミングで発生する不具合です。
消滅しないと何が問題となるかと言うと、GameScene3のようなステージがクリアできないことになります。
再現した様子が以下です。

この不具合の1番の原因は、以下になります。

箱の破片によって、ドラゴンが針に触れるまでにタイムラグがある

このタイムラグが発生している間に、針の上下運動によりドラゴンに力が加わっており、
その力によってドラゴンが運悪く横方向に飛ぶと、今回のような現象が発生します。

まずは問題点を確認したところで、具体的な修正は次のセクションで行います。

修正方法

修正方法として以下を採用したいと思います。

●方針
ドラゴンと箱の破片の衝突を無くす

●具体的な方法
箱の破片は、他のオブジェクトと衝突しないようにする

実はこの方法と似たようなことを以前行っており、
17回目の記事で対応した、プレイヤーと箱の破片の衝突を無くした対応と同じことを行います。

では実際の操作ですが、まず Edit > Project Settings をクリックします。

Physics を開いて、Crash_Crate_Piece が他のレイヤーと衝突しない設定に変更します。

ただしこのままシーンを再生すると、箱を壊してもドラゴンが落下しなくなります。

これはドラゴンのアニメーターに座標の指定が含まれているのが原因で、
GreenDragon の Animatorコンポーネントで Apply Root Motion にチェックを入れると解消されます。

※元々これをチェックせずに機能していたのは、破片との衝突により物理演算が機能していたためです。

これで以下の様に、針に触れるとタイムラグなく消滅するようになります。

不具合は解消されましたが、針に触れて瞬時に消えてしまうのが少し味気なくなりました。
この記事では対応しませんが、余裕のある方は以下のような対応を行ってみると良いと思います。

1.針に触れてもすぐには消滅しないようにする
2.代わりに針に触れるとドラゴンがダメージを受けるアニメーションを再生
  併せてコリジョンは無効にしておく
3.アニメーション終了時に消滅するようにする

ここまで連載を読み進めた方はある程度対応できるかと思いますので、是非挑戦してみて下さい。

おわりに

今回の内容は番外編という形にしましたが、不具合の致命度を考えると実開発では必須の工程と言えます。
このほかの少し大きめの不具合としては、ドラゴンが炎を吐く際に位置がズレるというものがあります。

連載では対応しませんが、簡易的な対応としてはコライダーのサイズを調整する方法が考えられますし、
他の対応方法も考えてみると実践的な練習になるかと思います。

番外編はあと2回ほど続く予定ですので、是非お読みください!

 
 

連載目次リンク

実践Unityゲームプログラミング 連載目次
 

関連する連載リンク

「初心者のための」Unityゲーム制作 目次
 

© Unity Technologies Japan/UCL