前提
2DのRPGのマップ画面を作ろうとしています。
1つのシーン上に、Tilemap collider2Dで当たり判定を付けた壁用タイルマップと、Box collider2Dで当たり判定を付けたゲームオブジェクト(画像をもとにしたスプライト)があります。
オブジェクトには「矢印キーの入力に応じて画面上を移動する機能」を記述したスクリプトがアタッチしてあります。
画面上のゲームオブジェクトを矢印キーで動かし、壁にぶつかったらちゃんと停止するかどうかを確認しています。
事象
当たり判定そのものはきちんと働いており、壁を貫通したりすることはありませんでした。
しかし壁にぶつかった後も矢印キーを押しっぱなしにしていると(例えば右向きに進んだ結果壁にぶつかったなら、そのまま右矢印を押しっぱなしにしていると)オブジェクトがぶるぶると震えだし、見た目的におかしい挙動をはじめます。
インスペクター上では実際にtransformのposition値が±0.1程度のスパンで小刻みに増減しているのが確認できました。
この振動を起こさないようにする方法はありますでしょうか?
移動する機能のソースコード
void Update() { float horizontalKey = Input.GetAxis("Horizontal"); float verticalKey = Input.GetAxis("Vertical"); Vector2 position = transform.position; float speed = 0.01f; if (horizontalKey < 0) { position.x -= speed; } if(horizontalKey > 0) { position.x += speed; } if (verticalKey < 0) { position.y -= speed; } if (verticalKey > 0) { position.y += speed; } transform.position = position; }
Collider等の設定
タイルマップ側のTilemap collider2D
- 「複合で使用」にチェック
タイルマップ側のRiditBody2D
- ボディタイプ……キネマティック
- 衝突判定……連続的
- Constriants……x,y,z固定
オブジェクト側のRiditBody2D
- ボディタイプ……Dynamic
- 衝突判定……連続的
- Constriants……z固定
- 重力スケール……0
他は初期値のままかと思いますが、気になるところがあればお答えさせていただきます。
試したこと
衝突判定の連続的・非連続的の切り替え
ボディタイプの切り替え
補足情報(FW/ツールのバージョンなど)
unity2021.3.24

回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。