FC2ブログ
    08 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.» 10

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】オブジェクトがオブジェクトに当たった時に消すようにしたいよ!って時にこうやってます。 

    こんにちは!坂内っす。

    今日は「オブジェクトが他のオブジェクトにあたったら消す」方法。

    え?そうです。基本ですね。

    例えば、弾が飛んでいき、壁にあたったら消えるようにします。

    弾に以下のスクリプトを付けます

    [Bullet.cs]
    using UnityEngine;

    public class Bullet : MonoBehaviour {

    Rigidbody2D myRigid;
    float SPEED = 7f;

    private void Awake() {
    myRigid = GetComponent<Rigidbody2D>();
    }

    void FixedUpdate() {
    BulletMovement();
    }

    void BulletMovement() {
    myRigid.velocity = new Vector2(SPEED, myRigid.velocity.y);
    }

    private void OnCollisionEnter2D(Collision2D collision) {
    Destroy(gameObject);
    }

    }


    OnCollisionEnter2Dが「何か他のオブジェクトに衝突したとき」のメソッドです。


    こんな感じで、当たるとBulletオブジェクトが消えます。

    このタイミングでエフェクト(パーティクルを出してみましょう)

    こんなエフェクトを用意しました。


    これを弾が壁にぶつかった時にだすようにBullet.csを変更します。
    [Bullet.cs]

    private void OnCollisionEnter2D(Collision2D collision) {
    foreach(ContactPoint2D point in collision.contacts) {
    GameObject effect = Instantiate(brokenParticlePref);
    effect.transform.position = point.point;
    }
    Destroy(gameObject);
    }

    変えたのはOnCollisionEnter2Dです。

    foreach(ContactPoint2D point in collision.contacts)
    で、当たった場所の座標が取れます。

    これでこんな感じになると思います。



    なかなかうまく当たりませんが(笑)

    当たった場所からエフェクトが出てる感じになりますね。

    というわけで、基本に戻ってゲームで使いそうなものを挙げてみました。

    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    コメント

    コメントの投稿

    Secret

    トラックバック

    トラックバックURL
    →http://halcyonsystemblog.jp/tb.php/488-a7d72461
    この記事にトラックバックする(FC2ブログユーザー)