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