2016-03-10 1 views
3

J'ai un problème avec un script. J'essaie de créer un champ d'étoiles au hasard dans une sphère pour ma scène d'unité. Mais je suis nouveau à l'unité et C# donc je suis un peu confus.Particules pour créer un champ d'étoiles dans l'unité

Les étoiles ont une place fixe donc elles ne devraient pas bouger et sont donc créées dans Start(); puis sont dessinés dans Update();

Le problème est que j'obtiens cette erreur:

MissingComponentException: There is no 'ParticleSystem' attached to the "StarField" game object, but a script is trying to access it. 
You probably need to add a ParticleSystem to the game object "StarField". Or your script needs to check if the component is attached before using it. 
Stars.Update() (at Assets/Stars.cs:31) 

Si j'ajouter un composant système de particules manuellement provoque une charge de gros clignotants taches orange, que je ne veux pas, donc je veux ajouter la composant dans le script d'une certaine manière.

Ceci est mon script associé à un objet de jeu vide:

using UnityEngine; 
using System.Collections; 

public class Stars : MonoBehaviour { 

    public int maxStars  = 1000; 
    public int universeSize = 10; 

    private ParticleSystem.Particle[] points; 

    private void Create(){ 

     points = new ParticleSystem.Particle[maxStars]; 

     for (int i = 0; i < maxStars; i++) { 
      points[i].position = Random.insideUnitSphere * universeSize; 
      points[i].startSize = Random.Range (0.05f, 0.05f); 
      points[i].startColor = new Color (1, 1, 1, 1); 
     } 

    } 

    void Start() { 

     Create(); 
    } 

    // Update is called once per frame 
    void Update() { 
     if (points != null) { 

     GetComponent<ParticleSystem>().SetParticles (points, points.Length); 

     } 
    } 
} 

Comment définir pour obtenir un champ d'étoiles statique, car l'ajout d'un composant système de particules me donne manuellement ces particules gênantes orange et je suis manque pour le faire purement via des scripts.

+0

Vous obtenez les particules orange lors de l'exécution du jeu ou juste dans l'éditeur Unity? –

Répondre

3

Il vous sera plus facile d'ajouter manuellement le système de particules et de modifier les paramètres afin de ne pas voir de formes amusantes au moment de l'exécution ou dans l'éditeur. En même temps, vous n'avez pas besoin de définir les particules à chaque image dans Update (Mise à jour). Même si vous l'avez fait, l'appel de GetComponent est coûteux. Vous devez donc enregistrer le ParticleSystem en tant que champ de la classe dans la méthode Start().

Voici un code modifié qui a fonctionné pour moi:

using UnityEngine; 

public class Starfield : MonoBehaviour 
{ 

    public int maxStars = 1000; 
    public int universeSize = 10; 

    private ParticleSystem.Particle[] points; 

    private ParticleSystem particleSystem; 

    private void Create() 
    { 

     points = new ParticleSystem.Particle[maxStars]; 

     for (int i = 0; i < maxStars; i++) 
     { 
      points[i].position = Random.insideUnitSphere * universeSize; 
      points[i].startSize = Random.Range(0.05f, 0.05f); 
      points[i].startColor = new Color(1, 1, 1, 1); 
     } 

     particleSystem = gameObject.GetComponent<ParticleSystem>(); 

     particleSystem.SetParticles(points, points.Length); 
    } 

    void Start() 
    { 
     Create(); 
    } 

    void Update() 
    { 
     //You can access the particleSystem here if you wish 
    } 
} 

Voici une capture d'écran du Starfield avec les paramètres utilisés dans le système de particules. Notez que j'ai éteint looping et play on awake.

Settings