直近で直面した&なんとなく解決した件について書いてみます。
ある日友人からゲームを作ろうと言われ、協力してみたところ、ポトリスみたいなゲームを作ってほしいとのこと。
あの綺麗な地面の削れ方とか、その見た目がちゃんとコリジョンになってるような、それをやってみた話。
きっともっといい方法はたくさんあるだろうと思ってます。
ちなみにUnity5.3.5f1。
1、とりあえずBoxColliderを敷き詰めてみよう。
細かいことを考えず、ひたすらBoxCollider2Dを敷き詰めてみた。
すると、
・重い!
・削れが綺麗じゃない!
・一定サイズ以下にすると何故かコリジョン抜ける!
という散々な結果
ステージはまぁまぁ広い想定ということで、敷き詰めたら大変なことになりそう、且つ綺麗に削れさせるの難しそうだったのでやめました。
2、PolygonColliderを使ってみよう!
このとき初めて知ったのですが、画像の形状に合わせたコリジョンを作ってくれるというPolygonCollider2Dという人が居るんです。
良い人だな、と思い使ってみました。
コリジョン綺麗、これは期待できる。
弾を撃って画像の影響範囲のアルファを抜いてもPolygonColliderは変わってくれないので、PolygonColliderを付け直す処理を着弾時にやってみた。
すると、
・PolygonColliderを付け直す処理があまりにも重い(そもそもそういう用途で使うものではないらしい)
・続けていくうちにPolygonColliderが絵の形と大きく変わってしまう。
困る!!!!
ということでやめました。
でも良い人でした、PolygonColliderさん。
3、画像のピクセルと判定
画像のピクセルのアルファが0かそれ以上かで全部見て判定をするという、もはやUnityの意味がないやつです。
実はBoxColliderがダメだった段階で会社の人に相談したところ、この方法が提案されていました。
大変だなぁと思いつつ対応
とりあえずピクセル分の配列でアルファが有るか無いかをもって判定。
・綺麗に削れている!!
・見た目通りのコリジョンになっている!!!
・重くない!!!!
一応解決ですね、ハイ。
ソースコードとか載せてなくてすいません。
余談
この方法は着弾時に画像のアルファ情報をいじってるわけですが、Unityのリソースの読み込み方次第でリソースに直で変更を加える感じになってしまうことがあった。
ちなみに私は画像の参照を直で持っていたので、そうなったわけで、Instantiateとかしてなんとかしました。