UnityでSpriteから当たり判定(Polygon Collider 2D)を自動でつける
はじめに
この記事では透過されたpng画像をSpriteにし、Polygon Collider 2Dを使って当たり判定を自動でつけるところまでやります
目次
- 背景透過画像を用意する
- Unityにimportする
- 画像をSpriteに変換する
- SpriteRendererとPolygonCollider2Dを使う
ターゲット
- 2Dアクションゲーム作りたいけど、当たり判定の作り方がよくわからない
- デザイナーじゃないし2DのAnimationが作れないから画像から当たり判定をつけたい
環境
Mac Mojave : 10.14.6
Unity : 2019.2.4f1
Rider : 2019.1
.Net : 4.x
1.背景透過画像を用意する
まず、元となるSprite画像を用意します。
今回はテストで作ったので、fire alpacaというソフトを使って背景透過のpng画像を描きアニメーションさせました。
今回はこの7枚の背景透過画像を元にします。
このとき注意しないといけないのが、攻撃するときに当たり判定をつけたい画像(武器など)と当たり判定をつけたくない画像(プレイヤー自身)などの出力を分ける必要があるということです
2.Unityにimportする
用意したpngファイルをそのままUnityのAssets内に置く
Assets/Resources/Sprites/Player/Attack3/Weapon
としました。
このままではUnityで使えないのでSpriteに変換していきます。
3.画像をSpriteに変換する
次に、Inspectorから、Texture TypeがDefaultになっているのをSprite(2D and UI)にします
Inspectorの下の方にApplyというボタンがあるので、そこをクリックします
すると、pngの画像をSpriteとして扱えるようになりました
4.SpriteRendererとPolygonCollider2Dを使う
ここまでで、透過画像のimportおよびSpriteへの変換が行えました。
最後に、自動でColliderを生成してくれるPolygonCollider2Dを使います。
- SpriteRendererをAddComponentする
- SpriteRendererのSpriteに自動でColliderをつけたい画像を設定する
- PolygonCollider2DをAddComponentする
- 自動で生成完了
流れはこれだけなのですが、順番が問題でこの順番じゃないとPolygonCollider2Dは自動で生成してくれません。
また、アニメーションさせたくてScriptから連続でSpriteを変更し、自動的にそのSpriteから当たり判定を付与したいときは
private async void Renderer(){
_spriteRenderer.sprite = _attackSprites[i];
gameObject.AddComponent<PolygonCollider2D>();
await UniTask.Delay(50);
Destroy(GetComponent<PolygonCollider2D>());
}
このようにDestroyメソッドの中にGetComponent()を入れて削除し、またAddComponentで追加し自動生成を行うといっためんどくさい作業をしないといけないみたいです。
エディター上のPolygonCollider2DをResetすれば自動でColliderをつけてくれますが、Scriptから
private void Reset(){
//hogehoge
}
このように書くと、Resetがoverrideされるみたいで、ここに買いた処理がResetボタンを押した時の処理になるみたいです。
なので、処理は重いですがこういう形にしました。
ちょっとハマったところ
- 画像の出力は全てUI.Imageでやっていたので、SpriteRendererの存在を知らなかったた
もっとこうした方がいいよとかここ間違ってる等ありましたらご指摘ください!
Author And Source
この問題について(UnityでSpriteから当たり判定(Polygon Collider 2D)を自動でつける), 我々は、より多くの情報をここで見つけました https://qiita.com/yamauchi_ryoga/items/97ccbdda5912fdca7c52著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .