c# - 更改粒子系统 Material Unity 3D脚本

标签 c# unity3d particle-system

我正在尝试为我的对象创建粒子发射,这些对象实际上是国际象棋游戏中的棋子。我使用 Inspector 为粒子系统更改了粒子 Material ,它工作正常,但是,当我尝试使用脚本更改它时,没有任何反应(黑色 pawn 的粒子保持粉红色)。

我不确定脚本有什么问题,是否是 Material 问题的变化或者我需要设置 Material 的路径。如果有人提出解决方案,我会很高兴!

这是脚本:

public class BlackPawnParticleSystem : MonoBehaviour 
{
    private Material m_Material;
    private ParticleSystemRenderer psr;

    private void Start() 
    {
        var ps     = GetComponent<ParticleSystem>();
        m_Material = GetComponent<Renderer>).material;
        psr        = GetComponent<ParticleSystemRenderer>);

        psr.material = Resources.GetBuiltinResource<Material>("BlackBishop.mat");
    }

它是这样的:

enter image description here

编辑:

代码更改:

public class BlackPawnParticleSystem : MonoBehaviour 
{
    private Material m_Material;
    private ParticleSystemRenderer psr;

    private void Start() 
    {
        var ps       = GetComponent<ParticleSystem>();
        m_Material   = GetComponent<Renderer>().material;
        psr          = GetComponent<ParticleSystemRenderer>();
        psr.material = Resources.Load<Material>("BlackBishop");
    }

我的 Material 的位置: enter image description here

Material 检验员:

enter image description here

附加到对象的脚本:

enter image description here

最佳答案

问题是这一行:Resources.GetBuiltinResource<Material>("BlackBishop.mat")

它返回空值。 Resources.GetBuiltinResource函数用于加载 Unity 内置的资源,而不是您创建的资源。例如,“Sprites-Default.mat”。没有名为 "BlackBishop.mat" 的内置 Material ,因此它返回 null。


要加载您创建的 Material ,请使用 rhe Resources.Load功能。

首先,创建一个名为“Resources” 的文件夹,然后将您的“BlackBishop.mat” Material 放在那里。您现在可以按如下方式加载它:

Resources.Load<Material>("BlackBishop");

请注意我没有在名称中包含“.mat”。使用 Resources.Load 时不包含扩展名功能。如果您这样做,它将找不到它。

编辑:

But still nothing happens on my game scene

请慎重:

1。正如我在原来的回答中所说,您必须创建一个名为“资源”的文件夹,并且必须将该文件夹中的“Black Bishop” Material 。你没有这样做,它不应该工作。这个文件夹的拼写必须正确,所以直接从这个答案中复制它。同样,它应该被命名为“Resources”

2。您的 Material 名为“Black Bishop” 而不是“BlackBishop”。见空间。请在代码中修复此问题。那应该是Resources.Load<Material>("Black Bishop"); Resources.Load<Material>("BlackBishop"); .

3。您的 Material 当前正在使用“标准” 着色器。将其更改为粒子着色器。您可以通过选择 Material 并将着色器从“标准”更改为“粒子/Alpha 混合预乘” 来实现。就是这样。您的问题现在应该已解决。

额外的:

我注意到您正在使用文件夹来组织您的资源。您的“Black Bishop.mat” 位于奥术网络 --> 国际象棋 --> Material --> 棋子 --> 塑料中。我建议您将“Materials”文件夹移动到上面#1中创建的“Resources”文件夹。

现在,您的“Black Bishop.mat” 应该在 Assets --> Resources --> Materials --> Pieces --> Plastic 中。

您现在可以将其加载为:

Resources.Load<Material>("Materials/Pieces/Plastic/Black Bishop");

如果您仍然遇到问题,请再次更新您的代码和新的 Inspector 图像。请记住,拼写很重要。

关于c# - 更改粒子系统 Material Unity 3D脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47677764/

相关文章:

c# - 同步 pdf 打印和标准打印

c# - Nullable<T> 的装箱/拆箱行为如何可能?

c# - 使用新的 Unity 5.1 传输层 API 流式传输 WebCamTexture

swift - 检测 SKNode 和粒子之间的碰撞?

c# - 类型的更短命名约定

c# - 构建发生时 Visual Studio 2010 崩溃

unity3d - 如何在tilemap中动态设置tile?

c# - 来自不同线程的统一更新变量

java - 处理:为什么我的粒子系统在跟随鼠标时在不同的位置绘制两次?

unity3d - UI 上 Unity 粒子系统中的渲染问题