naichi's lab

3日後の自分(他人)への書き置き

【Unity】(未解決)Spriteの形状に合ったCollider2Dをランタイムで動的生成したい

環境

  • Unity 2018.3.0f2

やりたいこと

f:id:naichilab:20190114235525p:plain:w320

  • 動的に SpriteRenderersprite を差し替えている
  • 差し替えた sprite の形に合わせて Collider2D を作りたい
  • エディタでは AddComponent<PolygonCollider2D>() するとざっくりとした形でコライダ生成してくれる

iOSのランタイムだとエラー発生

Sprite outline generation failed - could not read texture pixel data. Did you forget to make the texture readable?

  • AddComponent<PolygonCollider2D>() したタイミングで上記エラー発生(XCodeでログ確認)
  • そうなると赤枠範囲でのコライダが作られちゃうようで、青枠タップしても低木を選択できなかった。
    • f:id:naichilab:20190115002640p:plain:w320

対応

  • エラーメッセージに書かれてる通り、Spriteの Read/Write Enabled を有効にする。
    • f:id:naichilab:20190115002943p:plain:w320
  • 今回はSpritePackerを使っていたので、Sprite個別ではなくPacker側を変えるだけでよかった。
    • f:id:naichilab:20190115001808p:plain:w320

解決!のように見えてなんかおかしい

  • 赤丸部分は反応するけど木の幹あたりが触れない
    • f:id:naichilab:20190115003237p:plain:w320

Colliderを可視化

kan-kikuchi.hatenablog.com

こちらを参考に見えるようにしてみた。kanさんいつもありがとうございます。

  • エディタ
    • f:id:naichilab:20190115010951p:plain:w320
  • iOS
    • f:id:naichilab:20190115011005p:plain:w320

やっぱりおかしい。低木にいたってはPolygonCollider2Dのデフォルト形状だ...

どうしよう

事前にコライダ形状もマスタデータとして用意しておくしかないのかな・・・

そもそもサボって動的に作ろうとしてるのが不味いかもしれない。 端末ごとで形状違うとかになったら目も当てられない。