2017-04-03 12 views
1

Unityバージョン5.5を5.6にアップデートしたとき、Collision2D.contacts配列にエラーが発生しました。連絡先配列にアクセスしようとすると、今すぐ連絡先情報を取得できません。Unity5.6 Collision2Dコンタクトポイントの配列インデックスが範囲外エラー

void OnCollisionExit2D(Collision2D col) 
    { 
    if (col.gameObject.CompareTag("Ground")) 
    { 
      if ((_transform.position.y - col.contacts[0].point.y) > colliderHeight/2 + .15f) 
      { 
       Debug.Log ("Contact count = " + col.contacts.Length); 
       _onGround = false; 
       ParticleController.PlayDustEffect(); 
      } 

     } 
    } 

エラーログ:

IndexOutOfRangeException:配列のインデックスが範囲外です。 (資産/スクリプト/ CharacterController/Player.csで:759) Player.OnCollisionExit2D(UnityEngine.Collision2DのCOL)

私は、エラーを解決することができますか?

お時間をいただきありがとうございます。

答えて

0

、APIが今あるようです:あなたは空の配列myContactsに初期化し、合格

collision.getContacts(myContacts)

。これについて詳しくはCollision2D.contactsのドキュメントをご覧ください:

着信Collider2Dとの特定の連絡先。 はメモリガーベジを生成するので、これを使用しないでください。代わりに GetContactsを使用してください。

1

Unity 5.6では、衝突の出口点がもう計算されないようです。このバージョンでは

物理:内部接触の処理が完全に書き直され、より堅牢で信頼性の高い連絡先のレポートが提供されました。

私は、次のような論理を推測しています。なぜなら、2つのコライダーが互いに接触していないと、なぜ接点があるのでしょうか?もう接点がないので、col.contactsは空です。したがって、col.contacts [0]にアクセスしようとすると、要素が存在せず、IndexOutOfRangeExceptionがトリガーされます。

Collision.contacts documentationから

(ないCollision2D.contacts 1、私は動作は同じであると仮定):

すべての接触は、通常の接触点、および衝突2つのコライダーを(ContactPointを参照)が含まれています。内部からOnCollisionStayまたはOnCollisionEnterいつでも連絡先に少なくとも1つの要素があることを確認できます。

したがって、OnCollisionExitは、いずれの場合でもcol.contactsに少なくとも1つのポイントが存在することを保証しません。 Collision2DにContactPoint2DにアクセスしようとしているときにArrayIndexOutOfRangeエラーを検索する方のため

+0

アドバイスをいただきありがとうございますが、ここに問題があります。最後に検出された衝突の情報にアクセスできます。 https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnCollisionExit.html - Unity 5.5を5.6にアップデートした後、OnCollisionExit2D関数をもう使用したときに連絡先情報を取得できません。この問題を解決できない場合は、Unity 5.5をインストールします。 –

+0

これはOnCollisionEnter2Dで私に起こります。接触点なしで衝突を起こすことはどのように可能ですか? –

関連する問題