0
1

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.

Unityのパーティクルでシューティングゲームの自機弾を作る

Last updated at Posted at 2019-07-06

環境

Unity 2019.3.0a6
Windows 10 Home

目標

入力に応じて45度間隔で3方向に弾を射出し、衝突したら弾と衝突対象を破壊する

準備

タグに"Enemy"を追加する
衝突する対象のコンポーネントに何かしらのCollider(2Dを除く)をアタッチ
衝突対象のタグには"Enemy"を指定

ParticleSystemの設定

  • Transform
    • Inspector上でリセットする
  • ParticleSystem (変更したもののみ記載)
    • main
      • Looping : チェックを外す
      • Start Lifetime : 2.5 (2.5秒後に自動的に破壊される)
      • Start Speed : 5(初期速度)
      • Simulation Space : World (弾が独立して移動する)
      • Play On Awake : チェックを外す (起動時に再生しない)
    • Emission
      • Burst
        • Rate over Time : 0
        • Count : 3 (1回に3発撃つ)
        • Cycles : 1 (1回だけ繰り返す)
    • Shape
      • Shape : Circle
      • Radius : 0.0001 (半径)
      • Arc : 90 (1発目~3発目の角度)
        • Mode : Burst Spread (等間隔)
      • Rotation : (X,Y,Z) = (0,0,45) (1発目の角度)
    • Collision
      • Type : World
      • Mode : 3D
      • Lieftime Loss : 1 (衝突時に自身を即破壊)
      • Collision Quality
        • Collides With : Enemy (自分でタグを追加)
        • Enable Dynamic Colliders : チェックを入れる
      • Send Collision Messaages : チェックを入れる (スクリプトからパーティクルの衝突を検知)

メモ

設定どおりであればX軸の正の方向が0度で反時計回り
90 ÷ (3 - 1) = 45 で弾1発毎の角度は45度
1発目を45度方向に射出 (45(ShapeのRotation.zの値))
2発目を90度方向に射出 (45 + 45)
3発目を135度方向に射出 (45 + 45 + 45)

ParticleSystemにアタッチするスクリプト

PlayerShooter.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerShooter : MonoBehaviour {
    ParticleSystem particleSystem;
    float shootRate = 0.25f;

    private float count = 0.0f;

    void Start() {
        particleSystem = GetComponent<ParticleSystem>();
    }

    void Update() {
        count += Time.deltaTime;
        if (Input.GetButton("Fire1") && shootRate < count) {
            particleSystem.Play();
            count = 0;
        }
    }

    void OnParticleCollision(GameObject c) {
        Destroy(c.gameObject);
    }
}



参考

https://forum.unity.com/threads/destroy-single-particles.490654/
https://docs.unity3d.com/ja/current/Manual/PartSysCollisionModule.html

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?