こんばんは、ちきなるです。
ゲームも開発しているのです!!
進捗が無いだけで・・・。
正直、今作っているゲームは、デザインが全く決まらないので一旦ストップしています。
スッキリするデザインが決まったら再開予定!!
で、何をしているかと言いますと・・・。
この間、Unity1週間ゲームジャムで、2Dアクションゲームを作ったのですが、特急かつ、やる気が低下していたので、中途半端なものになっています。
それが気に入らなかったので、改めて2Dアクションについて、色々触っていました。
特にジャンプと着地判定。
2Dアクションゲームを作る時、ジャンプの処理がすごく難しい。
ジャンプだけを作ると、無限ジャンプしてしまいます。どこまでも、上がっていきます。
なので、ジャンプ中はジャンプできない。または、指定回数しかジャンプできない。としなければいけません。
そうすると、ジャンプをリセットする機能が必要になります。
これを付けないと、ゲーム中1度しかジャンプできないゲームになってしまいます。
その、ジャンプをリセットする判定が、着地判定。
地面に足が付いたよ。もう一度ジャンプできるよ。ってやつです。
この辺りの、処理をしばらく考えていました。
これで良し!!と思ったら、この時はダメだ~。とか、この状況だと判定が上手くいくの?とか色々調べていました。
で、どうなったかと言いますと。
OnCollisionEnter2Dでオブジェクトの接触を確認し、Collision2Dのcontactsのpointをあれやこれやして、判定すると、上手く出来ました。
だたし!!斜め判定が良くわからない。斜めはまだ調べている所です。かなり大雑把な処理になりそうな気が・・・。
かなりざっくり書きましたが、しっかり書くとかなり時間が掛かるので、とりあえず状況報告的にざっくり書きました。
以上、一応ゲームも作っている ちきなるでした。
一応、調べたことを少しだけ・・・。
Unityでデバックしながら、動きを確認しただけなので、間違っている可能性もあります。お気を付けください。
まず、OnCollisionEnter2Dで Collision2Dのcontactsのpointを確認すると、オブジェクトがある位置とずれていました。
多分ですが、オブジェクトが衝突すると、一瞬めり込みます。これが原因かな?と思います。
めり込んだ状態で、contactsのpointが取られて、反発でオブジェクトが離れ出した時に、OnCollisionEnter2Dが呼ばれている気がします。座標を見る限り。
なので、 contactsのpointがオブジェクトの底辺の線上にあるかどうかで判定すると、なんかずれます。
最終的に、contactsのpointがオブジェクトの現在位置の外側にあることが分かったので、そこで判定することにしました。
これはあくまで、座標を確認して、全て外側だったのでそう思うだけです。間違っている可能性もあります。
とりあえず、上手く出来ています。
実際どう判定しているかと言いますと、
前提条件として、BoxCollider2Dを使用して判定しています。地面も同じくBoxCollider2D。
斜めとか、先がとがっていると上手く判定できません。キャラクターをBoxCollider2Dで作るか、足元だけBoxCollider2Dにしなければ上手く判定できません。
それと、リファレンスを見ると、contactsの使用はせず、Collision2D.GetContacts( ContactPoint2D[] contacts )で取得してから、使用するそうです。
要素数は、Collision2D.contactCountで取れるはず。多分・・・。
で、線同士でぶつかると、contactsのpointは、2つ取られます。重なっている線の両端です。
contactsの2つのpointの中間点((point1 + point2) / 2)。これが、オブジェクトの両端の内側に合って、底辺より下にあったら、着地!!と判定しました。
文章だけで見にくくて、申し訳ない気持ちです。
そのうちまとめると思います。多分。
コメント