現在、Anima2Dでアニメーションするオブジェクトにタッチで当たり判定をとりたいと思っているのですが、Anima2Dでのアニメーションに応じて変形したり動いてくれるコライダーを実装することは不可能なのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
手軽にやるとしたら、SkinnedMeshRenderer
が加工したメッシュのスナップショットをBakeMeshで取得して、それをMeshCollider
にセットするとかでしょうかね。
オブジェクトに下記のようなコードをアタッチして...
C#
1using System.Collections; 2using UnityEngine; 3 4public class ColliderUpdater : MonoBehaviour 5{ 6 private IEnumerator Start() 7 { 8 // わざわざSkinnedMeshRendererが取得できるまで待機していますが、これはAnima2Dの 9 // サンプルシーンにあるような、初期状態ではSkinnedMeshRendererを持っておらず 10 // 実行時にメッシュを構築するようなタイプのオブジェクトの場合を考慮したものです 11 var skinnedMeshRenderer = this.GetComponent<SkinnedMeshRenderer>(); 12 while (skinnedMeshRenderer == null) 13 { 14 yield return null; 15 16 skinnedMeshRenderer = this.GetComponent<SkinnedMeshRenderer>(); 17 } 18 19 var meshCollider = this.GetComponent<MeshCollider>(); 20 if (meshCollider == null) 21 { 22 meshCollider = this.gameObject.AddComponent<MeshCollider>(); 23 } 24 25 var bakedMesh = new Mesh(); 26 while (true) 27 { 28 skinnedMeshRenderer.BakeMesh(bakedMesh); 29 meshCollider.sharedMesh = bakedMesh; 30 yield return null; 31 } 32 } 33}
実行したところ、コライダー形状がメッシュの変形に追従しました。
これに対してレイキャスティングによるヒット判定を行ってみました。ヒットの有無を視覚化するため、マウスポインタの位置に球体を追従させて、ヒットすれば緑に、ヒットしなければ赤に塗っています。
例示したスクリプトのように毎フレームBakeMesh
を行うのは、ちょっと処理コストがかさむと考えられます。たとえばクリックした時だけメッシュに合わせた当たり判定ができれば十分ならば、クリックのタイミングでメッシュ更新するのでもよさそうです。
キャラクターが数体までならこの方式でも悪くないんじゃないかと思いますが、たくさんいる場合はさすがに重すぎるでしょうから、何か別の手を検討する必要があるでしょうね。
投稿2020/04/18 17:55
総合スコア10811
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/19 02:35 編集