Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用获取/设置粒子实例化ParticleSystem_C#_Unity3d - Fatal编程技术网

C# 使用获取/设置粒子实例化ParticleSystem

C# 使用获取/设置粒子实例化ParticleSystem,c#,unity3d,C#,Unity3d,有人能帮我理解我做错了什么,我得到了NullReferenceException:对象引用未设置为对象错误的实例吗 这是从一个旧的教程,最初没有实例化的ParticleSystem,所以根据一个类似的帖子的答案,我已经修改它的工作,但它似乎仍然没有实例化 最初,它只使用particleSystem.SetParticlespoints,points.Length;在更新方法中,但这不起作用,搜索答案使我找到了一个专门针对这个问题的帖子,但建议的解决方案仍然无法使它起作用 我做错了什么 using

有人能帮我理解我做错了什么,我得到了NullReferenceException:对象引用未设置为对象错误的实例吗

这是从一个旧的教程,最初没有实例化的ParticleSystem,所以根据一个类似的帖子的答案,我已经修改它的工作,但它似乎仍然没有实例化

最初,它只使用particleSystem.SetParticlespoints,points.Length;在更新方法中,但这不起作用,搜索答案使我找到了一个专门针对这个问题的帖子,但建议的解决方案仍然无法使它起作用

我做错了什么

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);
    }
}

如评论中所述:

private ParticleSystem _particleSystem;
仅声明引用变量,不创建实例

使用ParticleSystem的首选方法是将其附加到游戏对象,然后通过GetComponent引用它,在本例中,通过添加

_particleSystem = GetComponent<ParticleSystem>();
在Start方法中


另一个选择是通过编程方式向游戏对象添加组件,但是,通常最好通过编辑器直接附加组件,因为AddComponent会增加运行时开销

您在哪里将有效对象分配给_particleSystem?双击编辑器中的错误,它将显示导致该错误的代码行。告诉我们这行代码是什么样子的。在这段代码中,您在哪里创建一个私有实例?私人分词系统(ParticleSystem);;仅声明一个引用变量,它不会创建实例,也不应该以编程方式创建ParticleSystems-相反,它应该通过编辑器附加到游戏对象,然后使用GetComponentInitialize\u particleSystem检索。将_particleSystem=GetComponent`添加到Start函数的顶部。此外,请确保ParticleSystem连接到与Grapher1脚本连接到的相同游戏对象。编辑:好的,你把它修好了。这是一个副本,但我会让邪恶的羊添加答案,如果他想。不。您可以使用AddComponent从脚本执行此操作。