【Unity】衝突時にエフェクト(パーティクル)を発生させてプレイヤーに付いていくようにする方法

Unity

スポンサーリンク

プレイヤーと衝突時にエフェクト(パーティクル)が発生して、そのエフェクトがプレイヤーについていくようにする方法を紹介します。

パーティクルを生成後、プレイヤーの子のオブジェクトとします。

プレイヤーとしては以下を使います。

完成動作

作り方

シーンを作成

1.以下のようにGameObjectを配置する。

※Cubeで床、Cylinder(赤)にunitychanが当たったらエフェクトが発生してプレイヤーに付いていくように作る。

エフェクト(パーティクルシステム)を作成

1.以下のようにして、"Particle System"を作成

2.生成した"Particle System"のInspectorタブの"Particle System"コンポーネントを適宜設定する。
※今回は以下を変更
・ループはさせないので"Looping"のチェックを外す。
・"Start Color"を見やすいように赤にした。
・生成と同時に実行はされたくないので、"Play On Awake"のチェックを外す。(Play()を使って実行する)

エフェクト(パーティクルシステム)をプレハブ化

1.Hierarchyタブの"Particle System"オブジェクトをProjectタブにドラックアンドドロップしてプレハブ化する。

2.Hierarchyタブの"Particle System"を削除する。

削除後

プレイヤーが衝突したらエフェクト(パーティクルシステム)が発生してプレイヤーの子オブジェクトとするスクリプトを作成

1.ParticleFollowPlayer.csという名前のスクリプトを作成して、以下のコードを記載する。

using UnityEngine;

public class ParticleFollowPlayer : MonoBehaviour
{
	[SerializeField]
	[Tooltip("発生させるエフェクト(パーティクル)")]
	private ParticleSystem particle;

	/// <summary>
	/// 衝突した時
	/// </summary>
	/// <param name="collision"></param>
	private void OnCollisionEnter(Collision collision)
	{
		// 当たった相手が"Player"タグを持っていたら
		if (collision.gameObject.tag == "Player")
		{
			// パーティクルシステムのインスタンスを生成する。
			ParticleSystem newParticle = Instantiate(particle);
			// 生成したパーティクルのpositionをプレイヤーと同じにする。
			newParticle.transform.position = collision.gameObject.transform.position;
			// 生成したパーティクルをプレイヤーの子オブジェクトとする。
			newParticle.transform.parent = collision.gameObject.transform;
			// パーティクルを発生させる。
			newParticle.Play();
			// インスタンス化したパーティクルシステムのGameObjectを削除する。(任意)
			// ※第一引数をnewParticleだけにするとコンポーネントしか削除されない。
			Destroy(newParticle.gameObject, 5.0f);
		}
	}
}

衝突時にプレイヤーに付いていくエフェクトを発生させるGameObjectにスクリプトをアタッチ

1.ParticleFollowPlayer.csを衝突時にプレイヤーに付いていくエフェクトを発生させるブロック(Cylinderオブジェクト)にアタッチする。

2."Cylinder"オブジェクトの"Particle Follow Player"コンポーネントの"Particle"プロパティに発生させたいエフェクト(パーティクル)(今回はプレハブ化した"Particle System")を入れる。

プレイヤーオブジェクトのTagに"Player"を設定

1.プレイヤーオブジェクト(今回はunitychan)のTagに"Player"を設定

完成

これでプレイヤーがオブジェクトに衝突したらエフェクトがプレイヤーに付いてくる。

Unity

Posted by ton