FC2ブログ
02 «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.31.» 04

ハルシオンシステムの気まま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