おすすめ!自作ゲーム!

【バイサバ!】溜めて、狙って、ぶっ飛ばせ!チャージで全て薙ぎ払うタワーディフェンス!

イメージ
バイサバをBOOTHでも販売開始しました! サーマーセールも合わせて開催! 今なら 50%OFF! の 500円で購入可能 に! ダウンロードは →  https://yamatogamelabs.booth.pm/items/8407425   DLsiteで販売しています。(Bloggerの規約上、リンクは貼れません。 Bye!Bye!Survivor!  もしくは  RJ01621439  で検索してください) デモ版もあるのでまずはお試しから! ■ ゲーム概要 溜めて、狙って、ぶっ飛ばせ! 右クリック長押しでチャージ! 溜めるほど、攻撃がどんどんパワーアップ! 攻撃力・攻撃サイズ・Hit数・クリティカルまで強化される、強力なチャージ攻撃で、押し寄せるスライムをまとめて吹き飛ばそう! 敵をピンポイントで狙い撃つか、 最大までチャージして敵の群れを一気に薙ぎ払うか。 シンプルな操作で、チャージのタイミングと狙いが勝敗を分ける! チャージ攻撃で敵をまとめて撃破! ■ このゲームの魅力 シンプルな操作で、チャージのタイミングと狙いが勝敗を分ける! チャージ攻撃で敵をまとめて撃破! 基本操作は左右移動だけ。 攻撃は自動で行われるので、難しい操作は必要ありません。 そこに加わるのが、強力なチャージ攻撃。 チャージするほど攻撃が強くなり、 大きさやHit数も増加! 大量の敵をまとめて貫通させたり、 強力な一撃で狙った敵を撃ち抜いたり。 いつ撃つか、どこを狙うかはあなた次第! ■ クリスタルを守り抜け! スライムたちは、あなたではなくクリスタルを狙って押し寄せてきます。 敵がクリスタルに到達するとダメージを受け、 HPが0になるとクリスタルが大爆発! そのまま空の彼方へ吹き飛ばされてゲームオーバー! 攻撃だけでなく、クリスタルのHP管理も重要です。 ボスを倒してステージを突破! ステージの最後には強力なボスが登場。 大量のHPを持ち、強力な攻撃を繰り出してきます。 さらに、ボスがクリスタルに到達すると即ゲームオーバー! 敵の攻撃は、こちらの攻撃で相殺することも可能。 迫りくる敵と弾をまとめて薙ぎ払い、 ボスがクリスタルへ到達する前に撃破しよう! ■ オブ...

「Unity」地面との当たり判定は、「ContactFilter2D」でいいんじゃない?

「Unity」地面との当たり判定は、
「ContactFilter2D」派の大和局長です。


悩みがちな地面との判定です。

当たり判定用のオブジェクトを使ったりもしましたが、
予想外の挙動をして苦しんでたなー(  ̄- ̄)トオイメ



ContactFilter2Dを使えばいいんじゃないかな?



そして、いろいろ使ってみた結果、
私は「ContactFilter2D」にたどり着きました~




Unityは当たり判定とか用意してくれてるんだから、
用意しといてくれよ!



…と、思ったらありました。
ふつーに存在してました。
気づかなかっただけでした。



これなら「Raycast」 を使わずに、
簡単に地面との判定をとれるみたい。



しかも、左右の壁や天井とは判定を取らないとのこと、便利!



左右に飛び跳ねるプログラムで使ってみた!





地面と接地しているときに、
マウスクリックで左右に動くプログラムで試しました!

// 地面の判定を取るやつ
[SerializeField] private ContactFilter2D filter2d = default;
private Rigidbody2D rb2d;
private float jumpPower = 300; // ジャンプ力
 
void Start()
{
 rb2d = GetComponent <rigidbody2d>();
}
 
void Update()
{
 // ここで地面との判定を
 bool ground = rb2d.IsTouching(filter2d);

 // 着地していたら
 if (ground)
 {
  // 右クリックで右へ
  if (Input.GetMouseButtonDown(1))
  {
   // 初期化する
   rb2d.velocity = new Vector3();
   // ジャンプ
   rb2d.AddForce(new Vector3(0.5f, 1) * jumpPower);
  }
  // 左クリックで左へ
  if (Input.GetMouseButtonDown(0))
  {
   // 初期化する
   rb2d.velocity = new Vector3();
   // ジャンプ
   rb2d.AddForce(new Vector3(-0.5f, 1) * jumpPower);
  }
 }
}


地面と接しているときのみ、ジャンプできるので、
空中でジャンプはできません。


使い方は、


まずはこれを宣言します。
[SerializeField] private ContactFilter2D filter2d = default;


Update()の↓で判定が取れます
bool ground = rb2d.IsTouching(filter2d);


Rigidbody2Dを使うので取得しておかないといけないので注意!
Start()の時に取得しておきました↓
void Start()
{
 rb2d = GetComponent <rigidbody2d>();
}


あとは、
rb2d.AddForce(new Vector3(-0.5f, 1) * jumpPower);
で飛ばしています(これは左へ)


これだけでも私は問題なかったんですが、
角度を指定しておいた方がよさそうです。


・ UseNormal Angleにチェックを入れる
・ Min Normal AngeltとMax Normal Angleを


まとめ


わざわざ判定用のオブジェクトを用意することも、
Rayを飛ばす必要もなく、簡単に判定を取ることができました!


プログラムも短くて済むので、
初心者の私でも簡単に使うことができます。


ちなみにこれは2D用です。


※ 参考にしたサイト




このブログの人気の投稿

【バイサバ!】溜めて、狙って、ぶっ飛ばせ!チャージで全て薙ぎ払うタワーディフェンス!

Unityで子オブジェクトをすべて取得したり、1つだったり