2017-05

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

前後の当たり判定を2D的に処理する

世間はクリスマスらしいですね。まぁ、娘にプレゼント買ってきましたけどね。でもこれはサンタさんが娘にあげるプレゼントなのでパパからのプレゼントではないわけです。娘的には。それが気になるらしいです。ジィちゃん、バァちゃんはくれるのに、なぜパパはくれない?…と。難しい問題ですね。
さて、世間に流されることなくゲーム作っていきますよ。今日は当たり判定を調整しました。このゲームは見た目が2Dベルトスクロールアクションなので、プレイするときもそんな気分で遊ぶわけですが、これが意外と違和感があるんです。一般的な2Dベルトスクロールアクションだと最初の一発が当たれば次の攻撃もだいたい当たります。ところがこのゲームでは当たらないことがあるんです。まぁ、ノックバックしてる時点で当たらないことがあるのは仕方ないんですが、そうではなくて奥行きに対する処理の問題なんです。 わかりやすくするために図を作ってみました。上から見下ろした図で、上が水平斬りしたときで、下が突きをしたときの図です。見ての通り、同じ位置で攻撃しても水平斬りは当たりますが、突きはあたりません。
081224_Collision.jpg
実際に当たっていないんだから当たり前なんですが、画面上では当たっているようにも見えますし、水平斬りが当たった後だと余計に納得いきません。ゲームでは事実がどうこうよりもプレイフィーリングを優先しないといけません。一番簡単な解決方法は攻撃コリジョンをデカ目にすれば適当に攻撃してもバンバン当たります。でも、それではカタルシスに欠けます。そこで、判定の時だけ下の図のようにしました。
081224_Collision2.jpg
(カメラから見て)前後の距離(Length)を測って一定距離未満なら判定続行、一定距離以上なら処理中断しちゃいます。んで、コリジョンを前後の幅分だけシフトしてからヒット判定します。これなら微妙な位置関係でもガシガシと連続で攻撃が当たるようになります。一定距離というのはダメージ側のキャラ幅と、攻撃コリジョンの攻撃範囲というパラメータで決めます。攻撃範囲は基本は0,5mで、必殺技っぽいものは多少広くすることで周囲の敵を巻き込んでいる感じが出せるかと思います。

【追記】
キャラの半径と攻撃の半径が同じだと、キャラが(カメラから見て)前後に並んだ状態では攻撃があたりません。この状態はプレイヤーと敵がすれ違うことで頻繁に発生しますが、意図せずに頻発してしまうので、気持ちよくありません。そこで、攻撃半径をキャラ半径より10cm大きくすることでだいぶ遊びやすくなることがわかりました。大きくしすぎるのも嘘臭いので、この辺が妥当のようです。

● COMMENT FORM ●

ソースみてぇ

ヘボヘボでよければ…>> ソース

Vector3 AtkPos, DmgPos;
float CharaLength = Math.Abs( AtkChara.Pos.X - DmgChara.Pos.X );
if (( CharaLength - DmgChara.Radius + AtkCol.AtkArea ) > 0)
return false;

AtkPos = AtkCol.Pos;
DmgPos = DmgCol.Pos;
DmgPos.X += (AtkChara.Pos.X - DmgChara.Pos.X);

AtkCharaは攻撃側のキャラで、DmgCharaはダメージ側です。
AtkCol、DmgColはコリジョンクラスです。
中身は位置とか半径とか形状とか…。AtkAreaはその攻撃がどの程度(カメラから見て)前後に影響範囲があるかを指定します。コリジョンの半径とは別に持っています。
if文で範囲外のときは即弾いてます。

前提条件として、X軸は常にカメラから見て奥行き方向と決まっています。なので向きを気にする必要がなく、計算は足し算と引き算ぐらいです。
最後にダメージ側にXを足しこんでいるのが判定を同一線上にあわせる処理です。
後はAtkPosとDmgPosを使って球体同士の接触判定します。

こうした前提条件があれば簡単ですね。逆に言うと一般的な3Dゲームでは全然参考にならないんじゃないでしょうか?

この手の判定はウソ判定処理するのがやっぱりいいですよね。
自分も判定処理は強引にやっていたりしていますw

こんばんわ~shtさん
>> ウソ判定
最近ではシューティングでも3Dを使っているゲームが多々ありますが、判定は2D的なんでしょうね。
見た目が2D的だとこういう処理は重要ですね~。


管理者にだけ表示を許可する

トラックバック

http://karuduck.blog50.fc2.com/tb.php/89-19ee500e
この記事にトラックバックする(FC2ブログユーザー)

NEW ENTRY «  | BLOG TOP |  » OLD ENTRY

プロフィール

Karu_gamo

Author:Karu_gamo
<メールアドレス>
karu_gamo#hotmail.co.jp
#を@に置き換えてえてください。

<自分リンク>
かるがも研究所【新】
YouTubeチャンネル
公開素材置き場
仕様書
旧ブログ(見るとこないです)
管理者ページ

リンク

YouTube動画

FC2カウンター

カテゴリー

Twitter

 

月別アーカイブ

RSSフィード

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。