TANKS! チュートリアルの最終課題、新機能の実装。
タンクが爆風で空に舞い上がるエフェクトを追加したのですが、移動可能軸にyを含めた為、3dモデルの表面の地形を突き破る形でタンクが移動したときに永遠に下に落下してしまうという現象が起こるようになりました。
プレーヤーの操作感を良くしようとタンクのスピードを2倍に変更したことも、一因になっているかもしれません。
タンクが地形にめり込まないようにするには、どうしたら良いでしょうか?
すり抜けの防止策の一例はフォーラムにあります。
https://develop.hateblo.jp/entry/unity-object-surinuke
またTanksのフィールドの床のコライダはかなり薄いので(場所はLevelArt>Ground>GroundPanel)、BoxColliderのような分厚いコライダを床にするという方法もあります。
ご教示ありがとうございます!
RigitbodyのColision Detectionを「Continuos」にする、Timeの取得間隔を速くする、といった情報がとても参考になりました。
これである程度は建物の壁や外壁を貫通しづらくなったのですが、それでも貫通したときにはやはり同じように落下してしまいます。
(LevelArtの底面にBOXコライダーを張り付けても、なぜか落下の現象が起こってしまいます)岩や小オブジェクトはどんな速度でぶつかっても弾かれるのに、なぜか一部の建物の壁とフィールドの外壁だけは貫通してしまいます。
タンクの速度を下げればいいのかもしれませんが、そうすると快適性が損なわれるので悩ましいところですね…
取得間隔をいじったり、落下の速度制限を行って「バグが起こらない」処理と平行して
それでもバグが起きてしまった時のために「バグの修正」の処理を後ろ盾に置く手もあります。
例えば貫通してしまった時、「Y座標が〇になったら初期のY座標に戻し落下速度を0にする」「RollaBallで使ったようなDangerWallを配置しぶつかったら(以下同様)」のような仕様があれば、バグが起こってしまってもゲームを続行させることができます。