質問: Unityで2D格闘ゲームを作りたいと思っています。(Live2Dモデルのアニメーション使用) 様々なサイト様を参考にさせてもらいましたが、当たり判定のヒットボックスを出現させる行程がわかりません。 ・Animationにイベントを追加して、呼び出す...とまでは検討はついているのですが、スクリプトの方をどう書いていけばいいのか...。 Instantiateでヒットボックスを呼び出してDestroyするやり方しか思いつかなくて、困っています。(負荷がかかります) Colliderを子オブジェクトにつけてON、OFFすればいいのでしょうか...? その具体的なやり方も、Colliderの位置を指定して出現させるやり方もわかりません。 ・パンチモーションがあったとします。 自キャラの目の前、拳の位置に攻撃モーションのヒットボックスを一時的に置きたいです。 Animationでいうと、パンチを出すのは0f目~60f目だとして、その攻撃判定を30f~60fに指定して、当たり判定を1回だけ取る。というようなことが理想です。 他にも連続攻撃等も想定しているので、その辺りには回数制限のカウンターのための関数でも用意しようかと思っています。 ・Collider同士で接触判定を取る場合、「Pubic Void OnCollisionEnter2D(Collision2D collision)~」のvoidしか知りません。 この関数の場合、Animationのイベントとして呼び出すことが出来ません...。 void 〇〇(){~~~~}の中にどうすれば当たり判定を取るスクリプトが書けますか? tagで相手の当たり判定Colliderを判別させるものを構想しています。 ヒットボックスを出現させた上でその中の当たり判定を取るスクリプトがつくりたいです。
回答: Live2Dの場合、Animationが通常のUnityのAnimationでいいのか分かりませんが、考え方の方針だけ。 「AnimationはColliderの位置変更とオンオフだけする」「Colliderの衝突はUnityのシステムに任せる」という方向です。 1. 空のオブジェクトを作成し、そこにColliderを付けておきます。 2. 1のオブジェクトに当たり判定用スクリプトを付けます。 3. Animationの付いたオブジェクトにCollider操作用スクリプトを付けます。 4. AnimationEventなどでCollider操作用スクリプトを呼び出します。 ``` //当たり判定用 public class HitController : MonoBehaviour { pubic Void OnCollisionEnter2D(Collision2D collision) { //衝突した時の処理 } } //Collider操作用 public class ColliderController : MonoBehaviour { public Collider collider; //1で作成したColliderをインスペクタから入れておく。 void Start () { //最初はColliderをオフにしておく collider.enabled = false; } //AnimationEventなどから呼ぶ public void PunchOn() { //例えばColliderの位置を変える collider.transform.position = new Vector3(移動先の座標); //Colliderオン collider.enabled = true; } //AnimationEventなどから呼ぶ public void PunchOff() { //Colliderオフ collider.enabled = true; } } ``` 参考:アニメーションイベントの使用 - Unity マニュアル