11
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

パーティクルに当たり判定を実装する

Last updated at Posted at 2019-09-28

概要

パーティクルに当たり判定を実装する方法を紹介します。本記事では、パーティクルがオブジェクトに衝突すると衝突回数が加算されていくように実装します。

結果

最終的にこの動画にようになります。

方法

オブジェクトの配置.png

本記事で使用するオブジェクトは、緑色のCube、赤いParticle、衝突回数を表示するTextです。各オブジェクトのTransformの値は

  • Cube: Scale(3, 3, 3)
  • Particle System: Position(10, 0, 0), Rotation(0, -90, 0)
  • Main Camera: Position(4, 0, -10)

のように変更しました。さらにCubeにはBox Colliderをつけます。Box Colliderがないと衝突判定ができません。Box ColliderのIs Triggerのチェックは入れないでおきます。カメラから見てCubeの右側からParticleを放出するようにします。

パーティクルの設定.png

パーティクルの設定は上の図のようにします。Particleの色は図には映っていませんが、Start Colorで変更します。Particleの当たり判定を実装するうえで重要なのが

  1. Collisionにチェックを入れる
  2. CollisionのTypeをWorldにする
  3. CollisionのSend Collision Messagesにチェックを入れる
  4. スクリプトでOnParticleCollisionメソッドを呼び出す

です。1~3までは上の図の通りです。4については以下のスクリプトで説明します。

ParticleController.cs
using UnityEngine;

public class ParticleController : MonoBehaviour
{
    private int count;

    private void Start()
    {
        count = 0;
    }

    private void Update()
    {
    }

    void OnParticleCollision(GameObject obj) 
    {
        Count++;
    }

    public int Count 
    {
        get { return count; }
        private set { count = value; }
    }
}

ParticleController.csはParticle Systemにアタッチするスクリプトです。この中にOnParicleCollsionという名前のメソッドが入っています。これは、先ほどの1~3の設定ができているときにパーティクルがColliderのついているオブジェクトに衝突したときに自動で呼び出されるメソッドです。衝突するたびに、衝突回数を表す変数countを1ずつ増やしています。メソッドの名前はOnParticleCollsionでなければならず、引数の型もGameObjectでなければなりません。

TextController
using UnityEngine;
using UnityEngine.UI;

public class TextController : MonoBehaviour
{
    private ParticleController particleController;
    private Text text;

    private void Start()
    {
        particleController = GameObject.Find("Particle System").GetComponent<ParticleController>();
        text = GetComponent<Text>();
    }

    private void Update()
    {
        text.text = particleController.Count.ToString();
    }
}

続いてTextにアタッチするTextController.csです。Textに衝突回数を表示させる必要があるので、ParticleController.cs内で定義されている変数countを参照しなければなりません。そこでParticle SystemにParticleControllerがついていることを利用して

particleController = GameObject.Find("Particle System").GetComponent<ParticleController>;

でParticleController.cs内にアクセスできるようにします。あとはUpdateメソッドでTextの文字をcountにすれば衝突回数が増えていく様子が画面上で見てとれます。

以上です。

11
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?