質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1513閲覧

Anima2Dのアニメーションに沿ってコライダーを生成したい。

Bruno_5239

総合スコア23

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/04/15 13:58

編集2020/04/15 14:23

現在、Anima2Dでアニメーションするオブジェクトにタッチで当たり判定をとりたいと思っているのですが、Anima2Dでのアニメーションに応じて変形したり動いてくれるコライダーを実装することは不可能なのでしょうか?
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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}

実行したところ、コライダー形状がメッシュの変形に追従しました。

図1

これに対してレイキャスティングによるヒット判定を行ってみました。ヒットの有無を視覚化するため、マウスポインタの位置に球体を追従させて、ヒットすれば緑に、ヒットしなければ赤に塗っています。

図2

例示したスクリプトのように毎フレームBakeMeshを行うのは、ちょっと処理コストがかさむと考えられます。たとえばクリックした時だけメッシュに合わせた当たり判定ができれば十分ならば、クリックのタイミングでメッシュ更新するのでもよさそうです。
キャラクターが数体までならこの方式でも悪くないんじゃないかと思いますが、たくさんいる場合はさすがに重すぎるでしょうから、何か別の手を検討する必要があるでしょうね。

投稿2020/04/18 17:55

Bongo

総合スコア10807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Bruno_5239

2020/04/19 02:35 編集

ありがとうございます。 ご享受していただいた方法を試したところ確かにコライダーがメッシュに追従して変形しました! 先ほど自分のコードをよく見てみたところ、2Dレイキャストのコードをただレイキャストに置き換えただけだったため、レイの方向をVecto2にキャストしてしまって上を向いていました笑 Vector3に置き換えたところ無事反応したのでこれで万事解決しました! 確かに、かなり負荷がかかっていそうな処理ですね。 メッシュコライダーやポリゴンコライダーもモデルにかなり忠実に判定を作ってしまうため頂点数がとても多くなりがちなのが玉に瑕ですね笑 もっと自分でも調べてみます。助かりました!回答ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問