Unity

【Unity】3Dでキャラクターが壁に引っかかってしまう問題の解決策

はじめに

Unity 3Dでゲームを作成していると、キャラクターが壁に接触した際に「引っかかってしまう」「なんだかガクガクしてしまう」という問題を解決したのでその備忘録です。

Unityバージョン:2022.3.9f1 での操作方法になります。
バージョンが異なる場合操作方法やUIに差異がある場合がありますのでご注意ください。

原因

コライダーに初期状態で付与されている摩擦(friction)が影響しているためらしいです。

ゲームオブジェクト同士が接触する(=コライダー同士が接触する)と摩擦(=抵抗)が働いて動かないようにしているということですね。

なんだか余計なことをされているような気がしますが、この摩擦が設定されていないと傾斜のある坂にキャラクターなどを移動させた場合、登ることができなかったり、坂道の途中で静止させたつもりがススーっと勝手に坂を下っていったりするので、決して無用な設定ではないことがわかります。

しかし、スムーズなゲームプレイを考えると壁に接触すると移動しにくいというのはストレスなので解決していきましょう。

詳細手順

①ゲームオブジェクトを用意する

ここで言うゲームオブジェクトというのはプレイヤーキャラクターと壁など、コライダーがアタッチされていてゲーム中に接触する(摩擦を生じる)可能性のあるゲームオブジェクトのことです。

②物理特性マテリアルを作成する

今回の問題の肝である摩擦(friction)を制御する物理特性マテリアルを作成します。

プロジェクト>Asset の任意の場所でメニューを開いて「物理マテリアル」を選択し物理特性マテリアルを作成します。


ここではわかりやすく「masatu」とリネームしました(管理人は英語苦手なのでfrictionだとピンと来ない)。

③物理特性マテリアルの詳細設定を行う

物理特性マテリアルは作っただけの初期状態だと引っかかり問題を解決できないので、作成した物理特性マテリアルをクリックしてインスペクターで中身の設定を以下に変更します。

ここで紹介している設定値は管理人がちょうどいいと思った設定値であり、あくまで参考値です。必要に応じて値を変更してください。

動摩擦→「0」
静止摩擦→「0.6」
弾性力→「0」
衝突時の摩擦処理モード→「最小」
衝突時の弾性処理モード→「最小」

④ゲームオブジェクトに物理特性マテリアルをアタッチする

最後にプレイヤーキャラクターと壁などのコライダーに物理特性マテリアルをアタッチします。

期待した通りに動くかどうか確認し、必要に応じて物理特性マテリアルの設定値を変更してください。

本記事は以上となります。

-Unity