ブログ開拓記Part261 “ゲーム開発もしているよ”

ブログ開拓記Part261 “ゲーム開発もしているよ”

こんばんは、ちきなるです。

 

ゲームも開発しているのです!!

進捗が無いだけで・・・。

 

正直、今作っているゲームは、デザインが全く決まらないので一旦ストップしています。

スッキリするデザインが決まったら再開予定!!

 

で、何をしているかと言いますと・・・。

 

この間、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)。これが、オブジェクトの両端の内側に合って、底辺より下にあったら、着地!!と判定しました。

 

文章だけで見にくくて、申し訳ない気持ちです。

そのうちまとめると思います。多分。