[Unity(C#)] ParticleSystem의 복잡성 요약(예정)

입자 계통


Unity의 편리한 기능입니다.
누구나 쉽게 효과를 만들 수 있습니다.
하지만!한 걸음 한 걸음 Script로 변경하려면 한 시간과 두 시간을 모두 써야 합니다!

(예정)??


입자 한번 써본 사람 이해가 돼요?
매개 변수의 수량이 매우 많다.(나 같은 초보자에게)
그래서 나는 내가 사용하고 싶은 막힌 곳을 수시로 업데이트할 것이다.
여러분도 이런 물건을 찾을 수 없군요!그러니까 반나절 동안의 에피소드가 있다면.
편집 요청 및 설명에 도움을 요청하십시오.
반드시 손을 잡고 Particle을 공략해야 한다.(외력 요청)

MainModule


입자 시스템을 할 때 Duration의 변경은 불가능한 것 같다.

ainModule의 다양한 변경 예제
using UnityEngine;

public class ParticleTest : MonoBehaviour
{
    float _durationTimeValue = 5;
    float _startLifeTimeValue=3;

    ParticleSystem _particleSystem;
    ParticleSystem.MainModule _mainModule;
    ParticleSystem.MinMaxCurve _minMaxCurve;
    AnimationCurve _animationCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1));

    void Start()
    {
        _particleSystem = this.gameObject.GetComponent<ParticleSystem>();
        _mainModule = _particleSystem.main;
        _minMaxCurve = _mainModule.startLifetime;
        _animationCurve = _mainModule.startLifetime.curve;

        //Durationの変更はParticleSystemのプレイ中には不可のようです
        //_mainModule.duration = _durationTimeValue;

        //Loopのオンオフ
        _mainModule.loop = false;

        //StartLifeTimeの値の変更(Constantの場合)
        _minMaxCurve = _startLifeTimeValue;
        _mainModule.startLifetime = _minMaxCurve;

        //StartLifeTimeのモードの変更(Constant→Curve)
        ParticleSystemCurveMode particleSystemCurveMode = ParticleSystemCurveMode.Curve;
        _minMaxCurve.mode = particleSystemCurveMode;

        //StartLifeTimeの値の変更(Curveの場合)
        _minMaxCurve.curve = _animationCurve;
        _mainModule.startLifetime = _minMaxCurve;

        //2020/08/18 追記
        //StartColorの変更
        _mainModule.startColor = Color.red;
    }
}

Emission


이거 자주 쓰죠?나만?
필요에 따라 입자의 수량을 조절할 수 있어 유용하다.
Emission이 줄어들면서 사라진 샘플
using UnityEngine;

public class ParticleTest : MonoBehaviour
{
    [SerializeField]
    float deleteSpeed = 0.01f;

    ParticleSystem _ParticleSystem;
    ParticleSystem.EmissionModule _EmissionModule;
    ParticleSystem.MinMaxCurve _MinMaxCurve;

    void Start()
    {
        _ParticleSystem = this.gameObject.GetComponent<ParticleSystem>();
        _EmissionModule = _ParticleSystem.emission;
        _MinMaxCurve = _EmissionModule.rateOverTime;
    }

    void Update()
    {
        //だんだんと消滅させる
        _MinMaxCurve.constant -= deleteSpeed;
        _EmissionModule.rateOverTime = _MinMaxCurve;
    }
}

입자의 적중 위치 가져오기


최대 입자 = 1은 샘플링에 하나의 입자만 존재합니다.
입자 적중 위치에 입방의 견본이 나타나다
using System.Collections.Generic;
using UnityEngine;

public class ParticleHit : MonoBehaviour
{
    [SerializeField]
    GameObject obj;

    List<ParticleCollisionEvent> particleCollisionEventList = new List<ParticleCollisionEvent>();

    ParticleSystem _ParticleSystem;

    void Start()
    {
        _ParticleSystem = this.gameObject.GetComponent<ParticleSystem>();
    }

    //パーティクルの当たった箇所でオブジェクト出現
    void OnParticleCollision(GameObject other)
    {
        _ParticleSystem.GetCollisionEvents(other, particleCollisionEventList);

        Vector3 collisionHitPos = particleCollisionEventList[0].intersection;

        Instantiate(obj,collisionHitPos,Quaternion.identity);
    }
}

현재 빙산의 한 귀퉁이에는 이 표현도 어울리지 않지만 자주 사용하고 자주 잊어버리기 때문에 기록해야 한다.

참조 링크


스크립트에서 입자의 초기 색상 변경

좋은 웹페이지 즐겨찾기