Some Memorandum

DirectX11に挑む素人の備忘録。

床と壁の区別

Unityで『3Dな2Dアクションゲーム』という妙なものをつくって遊んでいます。

その過程でいろいろ壁にぶち当たって死にかけた内のひとつが

 

床と壁が区別できない

 

ことでした。

は?

では超わかりやすいキャプチャ達を見てみましょう。

 

f:id:snt_hst:20150818013752p:plain

こういうときに

f:id:snt_hst:20150818014106p:plain

まず黄色く塗りたくった部分を「このハコは地面ですよ」と決めてやります。

そうすると

  • 地面に立ってるならジャンプできる、空中にいるならジャンプできない
  • 地面に立ってるなら通常攻撃、空中にいるなら空中攻撃

とかがカンタンに決められます。やったぜ。

 

この「地面ですよ」設定はGroundタグをつくってうんぬんとかやり方があるのですが、別記事にします。

 

で、

話を戻しまして

先ほどの

f:id:snt_hst:20150818014106p:plain

この超キレイな床ですが

f:id:snt_hst:20150818015331p:plain

この赤い斜線部分って床じゃ無いやん。

と思われたかと思います。

確かにここ、壁です。

今のままでは壁なのに床あつかいです。

マズイです。どうマズイかというと

 

床に接してる

f:id:snt_hst:20150818020313p:plain

ジャンプできる

f:id:snt_hst:20150818020451p:plain

床扱いされてる壁に接してる

f:id:snt_hst:20150818020713p:plain

ジャンプできる

f:id:snt_hst:20150818020922p:plain

しかも摩擦が地面と同じなので、引っかかってジャンプ連打でズリズリ登れてしまう。

ちょっと私の解説スキルが限界に達したので、実際動かしてみてください。

https://www.googledrive.com/host/0B0UxKiOJznZyflZjbGYwYzgwRHo3eDVCc0tfaFFxUDRiZEh4bzhjUGgzSHJuRzFNcmQyTEk/ブログ用.html

お分かりいただけただろうか。 

これが曲者です。致命的です。

 

で、いろいろ試した結果。

f:id:snt_hst:20150818022240p:plain

画像の白いとこに薄っぺらくて透明で、摩擦0のつるっつるな壁を置くようにしました。

こうするといい感じに動いてくれます。

https://www.googledrive.com/host/0B0UxKiOJznZyflBhRU9fX29yZDRCMXE3UmEwLTlTQjJ4dzY4R3FfMlk4S1BiMG1xUm0zaTA/ブログ用2.html

 

やったぜ。

 

※因みに、新しい床を置くたびにいちいち両サイドに壁を置きなおすなんてのはやってられないので、スクリプトで壁のPrefabを自動生成させてます。床の横幅に合わせて。