使用获取/设置粒子

时间:2017-09-06 06:55:29

标签: c# unity3d

有人可以帮我理解我的错误,我得到NullReferenceException: Object reference not set to an instance of an object错误吗?

这是从最初没有实例化ParticleSystem的旧教程中获取的,所以基于类似帖子的答案,我已将其修改为有效,但似乎它仍然没有实例化..

最初,它只在particleSystem.SetParticles(points, points.Length);方法中使用了Update,但这不起作用,并且搜索答案让我找到了这个问题的专门帖子,但建议的解决方案仍然可以不能让它发挥作用。

我在这里做错了什么?

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

public class Grapher1 : MonoBehaviour
{
    public int _resolution = 10;
    private ParticleSystem.Particle[] _points;
    private ParticleSystem _particleSystem;


    private void Start()
    {
        if (_resolution < 10 || _resolution > 100)
        {
            Debug.LogWarning("Grapher resolution out of bounds, resetting to minimum 10", this);
            _resolution = 10;
        }

        _points = new ParticleSystem.Particle[_resolution];
        _particleSystem.Emit(_resolution);
        _particleSystem.GetParticles(_points);

        float increment = 1f / (_resolution - 1);
        for (int i = 0; i < _resolution; i++)
        {
            float x = i * increment;
            _points[i].position = new Vector3(x, 0f, 0f);
            _points[i].color = new Color(x, 0f, 0f);
            _points[i].size = 0.1f;
        }
    }


    private void Update()
    {
        _particleSystem.SetParticles(_points, _points.Length);
    }
}

1 个答案:

答案 0 :(得分:2)

如评论中所述:

private ParticleSystem _particleSystem;

只声明一个(引用)变量,它不会创建实例。

使用ParticleSystem的首选方法是将其附加到游戏对象,然后通过GetComponent引用它,在这种情况下添加

_particleSystem = GetComponent<ParticleSystem>();

Start()方法中。

另一种选择是通过GameObject.AddComponent以编程方式将组件添加到游戏对象中,但通常最好通过编辑器直接附加组件(因为AddComponent会增加运行时开销)