Как исправить: Исключение NullReferenceException: не создавайте свои собственные экземпляры модуля, получите их из экземпляра ParticleSystem

#c# #unity3d #particles #particle-system

#c# #unity3d #частицы #система частиц

Вопрос:

Я пытаюсь создать скрипт, чтобы при нажатии кнопки система частиц менялась на определенный цвет, все работает нормально, кроме изменения цвета частиц, когда я пытаюсь, появляется эта ошибка:

Исключение NullReferenceException: не создавайте свои собственные экземпляры модуля, получите их из экземпляра ParticleSystem

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Attack : MonoBehaviour
{
    public int MovementDirection = 0;
    public int State = 0;

    public GameObject attackOrb; //The prefab for our attack hitbox
    public Transform Player;        //Where the player is

    public float R = 0.0F;
    public float G = 0.0F;
    public float B = 0.0F;
    public float A = 1.0F;

    private ParticleSystem attackEffect;

    // Start is called before the first frame update
    void Start()
    {
        attackEffect = gameObject.GetComponent<ParticleSystem>();
    }

    // Update is called once per frame
    void Update()
    {
        var main = attackEffect.main;
        main.startColor = new Color(R, G, B, A);

        if (Input.GetKeyDown(KeyCode.Keypad1)) State = 1;
        if (Input.GetKeyDown(KeyCode.Keypad2)) State = 2;
        if (Input.GetKeyDown(KeyCode.Keypad3)) State = 3;
        if (Input.GetKeyDown(KeyCode.Keypad4)) State = 4;
        if (Input.GetKeyDown(KeyCode.Keypad5)) State = 5;
        if (Input.GetKeyDown(KeyCode.Keypad6)) State = 6;


        switch(State)
        {
            case 0:
                GetComponent<Renderer>().material.color = new Color(1f, 0.5f, 0.5f, 0.5f);
                R = 1f;
                G = 0.5f;
                B = 0.5f;
                A = 0.5f;
                break;
  

Это должно отображаться как цвета R, G, B, A, но вместо этого возвращает эту ошибку. почему он возвращает это и как бы я мог это исправить?

Полная ошибка:

 NullReferenceException: Do not create your own module instances, get them from a ParticleSystem instance
UnityEngine.ParticleSystem MainModule.set_startColor (UnityEngine.ParticleSystem MinMaxGradient value) (at C:/buildslave/unity/build/artifacts/generated/bindings_old/common/ParticleSystem/ParticleSystemBindings.gen.cs:50)
Attack.Update () (at Assets/Script/Attack.cs:30)
  

Комментарии:

1. В какой строке генерируется NullReference? Какова полная ошибка копирования / вставки из консоли?

2. @RetiredNinja Я отредактировал сообщение, выдает строку 30

3. var main = attackEffect.main; должен вызываться только 1 раз (возможно, в начале), а затем использовать кэшированный main как свойство класса.

Ответ №1:

Вот как изменить startColor систему частиц в Unity3D:

     var main = particleSystem.main;
    main.startColor = new ParticleSystem.MinMaxGradient(new Color(R, G, B, A));
  

Если вам интересно, зачем проверять тип ParticleSystem.MainModule.startColor . Это не тип, Color но ParticleSystem.MinMaxGradient .

Ответ №2:

Вероятно, вы создали gameobject и добавили particle system компонент.

чтобы исправить это, создайте a particle system из меню добавления, а не a gameobject . вы можете скопировать transform и particle data из старого и вставить их во вновь созданный particle system . вероятно, это ошибка Unity (с использованием 2019.1.14f1)

И вы можете получить к нему доступ следующим образом… он устарел, но это единственное, что работает, но вы можете попробовать другие, возможно, они будут работать в результате вышеупомянутого исправления.

 particleSystem.startColor = Color.white - (whatever color);