0

弾丸 (rigidbody2d、boxcollider2d) を別の敵オブジェクト (rigidbody2d、kinematic、circlecollider2d) に向けて発射しようとしています。この2つの衝突点が欲しいです。それらが衝突すると、衝突パーティクル効果が必要になり、接触点から、すべて異なる方向に移動する 5 つの岩オブジェクトを作成したいと考えています。どうすればこれを達成できますか? 問題は、私が取得した連絡先が間違っているように見えることです。衝突が発生すると、衝突パーティクル エフェクトが作成されますが、岩オブジェクトは、接触点ではなく、接触点に近い別のポイントに作成されます。また、岩のオブジェクトをインスタンス化した後に別の方向に移動するにはどうすればよいですか?

私のコード:

void OnCollisionEnter2D(Collision2D coll)
{
if (coll.gameObject.tag == "Enemy")
{
    ContactPoint2D contact = coll.contacts[0];

    GameObject rock1 =  Instantiate (rock, contact.point, transform.rotation) as GameObject;
    rock1.rigidbody2D.velocity = transform.up * 20;
    GameObject rock2 =  Instantiate (rock, newPos, transform.rotation) as GameObject;
    rock2.rigidbody2D.velocity = transform.right * 20;
    Destroy(coll.gameObject);
    Destroy (gameObject);
    Instantiate (explosion, transform.position, Quaternion.identity);           

}

}

4

1 に答える 1

0

初めてのお悩みに【接点以外に岩が産卵する】

ボックス コライダーは表面が平らで、衝突時に複数の接触点が生成されるため、弾丸からボックス コライダーを削除することをお勧めします。代わりに Circle コライダーを使用してください。(岩に制限はありません)。

あなたの2番目の問題[スポーンして別の方向に岩を投げる方法]

衝突から得られる接触点にはcontact.normal、衝突点への法線ベクトルを提供する法線ベクトル ( ) があります。

岩にランダムな回転を適用し、この法線ベクトルを岩を動かしたい方向に使用します。また、Collision2D には relativeVelocity ベクトルが含まれています。これを法線ベクトルに追加することもできます (少し現実的な物理効果が得られる可能性があります:))。

また、インスタンス化する岩isKinematicを true に設定しないでください。そうしないと、AddForce と Velocity が岩に影響を与えません。

于 2015-06-19T01:50:16.600 に答える