【Unity2D】Physics2D.Boxcastで判定しようとして失敗した話
こんにちは。なおキーヌです。
ブログ毎日更新は330日目になります。
前回「【Unity2D】引く・押す処理の作り込み」にて後ろや前にオブジェクトがある場合は動けなくするように制御しました。
現状、1次元でしか判定を取っていないのでオブジェクトをずらして動かすとオブジェクト同士がめり込んでしまいます。
RidigBody2DをDynamicにしてやれば押せるのですが、今度はプレイヤー側がTranslateで動かしているのでめり込みます。
一応Velocityで動かしても問題なさそうだったので、Translateを辞めてVelocityで移動させて物理演算を聞かせてしまうのもありかもしれません。
後日改良してチャレンジしてみます。
Boxcastを使ってみた
Linecastで使い方が大体わかったので、1度挫折したBoxCastの方を使ってみたのですが
どうやら矩形の中に入っているコライダに判定してしまいます。
自分自身とぶつかっているという認識になってしまいダメそうでした。
自分の周囲だけ取ろうとするとLinecastを4つ使って周囲に判定を作る手も考えてみましたが、
コードの見栄えも悪いしプログラミング的にナンセンスなやり方なので最悪の最悪にしようと思い一旦封印。
Boxcastでのゴリ押し法を思いついた
判定を取るのはレイヤーだけではなくZ軸も判定できるようなので、
掴んだオブジェクトはZ軸をずらして判定する箇所から存在を消してしまうというのも1つの手かもしれません。
プレイヤー側からみるとZ軸は気にせずレイヤーだけをみているので掴んだオブジェクトのZ軸がズレようが問題なしです。
むしろこれがダメなら結構手詰まりかもしれません。
それぞれのオブジェクトにスクリプトを持たせて衝突したら何かしら処理するというのをしなければいけません。
恐らくこれが一番正解に近いやり方な気がしてきました。
プレイヤーの移動をvelocityにしてもダメだったらこれを試してみようと思います。
RidigBody2DをDynamicにしてみる
いっそのことDynamicにして押せるようにしてみる。
ただ空気抵抗を0にするとスイーって動いてしまうので計算が必要になります。
欠点としてはゲームが意図しない動きになってしまう可能性があるという事です。
キチンと制御しないとバグの温床になってしまうので、なるべくやりたくないところですが
これが一番解決策としては一番手っ取り早い気がします。
明日色々試してダメそうならDynamicにして妥協しようと思います。
それでは。