床と壁の区別
Unityで『3Dな2Dアクションゲーム』という妙なものをつくって遊んでいます。
その過程でいろいろ壁にぶち当たって死にかけた内のひとつが
床と壁が区別できない
ことでした。
は?
では超わかりやすいキャプチャ達を見てみましょう。
こういうときに
まず黄色く塗りたくった部分を「このハコは地面ですよ」と決めてやります。
そうすると
- 地面に立ってるならジャンプできる、空中にいるならジャンプできない
- 地面に立ってるなら通常攻撃、空中にいるなら空中攻撃
とかがカンタンに決められます。やったぜ。
この「地面ですよ」設定はGroundタグをつくってうんぬんとかやり方があるのですが、別記事にします。
で、
話を戻しまして
先ほどの
この超キレイな床ですが
この赤い斜線部分って床じゃ無いやん。
と思われたかと思います。
確かにここ、壁です。
今のままでは壁なのに床あつかいです。
マズイです。どうマズイかというと
床に接してる
ジャンプできる
床扱いされてる壁に接してる
ジャンプできる
しかも摩擦が地面と同じなので、引っかかってジャンプ連打でズリズリ登れてしまう。
ちょっと私の解説スキルが限界に達したので、実際動かしてみてください。
お分かりいただけただろうか。
これが曲者です。致命的です。
で、いろいろ試した結果。
画像の白いとこに薄っぺらくて透明で、摩擦0のつるっつるな壁を置くようにしました。
こうするといい感じに動いてくれます。
やったぜ。
※因みに、新しい床を置くたびにいちいち両サイドに壁を置きなおすなんてのはやってられないので、スクリプトで壁のPrefabを自動生成させてます。床の横幅に合わせて。