2017-11-07 15 views
1

質問があります。現在、Unity内のパーティクルシステムで作業しています。私はシーンにそれらをインスタンス化し、いくつかのパラメータ(基本的に色だけ)を編集します。問題は、元のプレハブでも変更されたクローンについて私が変更したものです。あなたが想像することができるように、これは私が望むものではありません。だから私の質問は誰もがプレハブを編集せずにこれを行う方法を知っている?Unityのインスタンシエーションとパーティクル

GameObject l = Instantiate((GameObject)(Resources.Load("MultiSpell/Electric/Lightning"))); 
     ParticleSystem ps = l.GetComponent<ParticleSystem>(); 

     Gradient eGrad = createGradLightning(spellType.spellColour); 

     var psColor = ps.colorOverLifetime; 
     psColor.enabled = true; 
     psColor.color = eGrad; 

     var psTrails = ps.trails; 
     psTrails.colorOverLifetime = eGrad; 



Gradient createGradLightning(Color col) 
{ 
    Gradient grad = new Gradient(); 

    GradientColorKey col1 = new GradientColorKey(); 
    col1.color = col; 
    col1.time = 0; 

    GradientColorKey col2 = new GradientColorKey(); 
    col2.color = Color.black; 
    col2.time = 0.9f; 

    GradientAlphaKey alp1 = new GradientAlphaKey(); 
    alp1.time = 1; 
    alp1.alpha = 0; 

    GradientAlphaKey alp2 = new GradientAlphaKey(); 
    alp2.time = 0; 
    alp2.alpha = 0f; 

    grad.SetKeys(new GradientColorKey[2] { col1, col2 }, new GradientAlphaKey[2] {alp1, alp2}); 
    return grad; 
} 
+0

私には右のように見えます。あなたはグラデーションを変更していませんか? – Mars

+0

また、素材を変更するのではなく、sharedMaterialsを使いこなしていますか? – Mars

+0

私はグラデーションを変更しています。これは、システムのクローンを作成して元のプレハブを変更せずに変更できるようにすることです。 –

答えて

0

プレハブの代わりに(またはで)を編集するためのいくつかの一般的な原因は、インスタンス:

  1. 場合は、可能 エディタでスクリプト(にフックアッププレハブへの直接参照を持っていますあなたはあなたではなく、インスタンス化0よりも、直接材料を編集している別のスクリプト!)
  2. ご参照の代わりに、ここでInstantiate(ない 場合のResource.Loadにある)
  3. を持っています バージョンオン((1)および(2)を参照)
+0

私は自分の作成したグラデーション関数を表示するためにコードを編集しましたが、それはそれを特定するのに役立つでしょうか? –

+0

私によく見えます。あなたの変更は他の場所になければなりません – Mars

関連する問題