2016-04-11 9 views
0

Yakın bir zamanda bu soruyu sormayı denedim ama bunun yeterli bir soru olmadığını anladım. Oyunumda oyuncu bir itfaiyeci öğrencisidir ve oyunumda rastgele ateş açmak istiyorum (oyuncu tarafından tahmin edilemez), fakat bunu nasıl yapacağımı bilmiyordum.unity3d'deki farklı sahnelerde parçacık sistemini rasgele başlatmayı nasıl başarabilir

using UnityEngine; 
using System.Collections; 
public class Example : MonoBehaviour { 
public ParticleSystem[] particles; 
public int numOn = 3; 
public int j; 

void Start() { 
    for (int i = 0; i < particles.Length - 1; i++) { 
     j = Random.Range(i + 1, particles.Length - 1); 
     ParticleSystem t = particles[j]; 
     particles[j] = particles[i]; 
     particles[i] = t; 
    } 
    for (j = 0; j < numOn; j++) 
    { 
     particles[j].Play(); 
    } 
     } 
     } 
: kod burada Şimdiye kadar ben bu yapmış ama hiçbir şey iyi gider (I 3 ila 5 parçacıklar sistemlere sahip birlik t adlı bir boş nesne var ve tüm başlangıcında uyanık yok ayarlanır).

yardımdan mutluluk duyacaktır :-)

cevap

1

Prefabrikler kullanmayı deneyebilirsiniz. Editörde herhangi bir parçacık sistemine sahip olan ve yangın nesnelerinizin ihtiyaç duyduğu komut dosyalarını içeren bir oyun nesnesi oluşturun. İyi olduğunda, nesneyi hiyerarşiden projenize sürükleyin. Bu bir prefabrik oluşturacaktır (şimdi onu sahneden kaldırabilirsiniz). Şimdi, yumurtlama senaryosunda, GameObject tipi bir alan ekleyin ve daha önce yaptığınız prefabrik parçayı sürükleyin. Şimdi, bir tane oluşturmanız gerektiğinde, prefabrinizin bir kopyasını oluşturmak için Instantiate(prefabVar) numaralı telefonu arayın.

Düzenleme: Belirli bir vaka için
, yalnızca bir yangın rastgele bir konumda örneği vermesini istedikleri, bu gibi üreme komut bakmak bir şey olabilir:

public Transform[] SpawnPoints; 
public GameObject FirePrefab; 

void Start() { 
    Transform selectedSpawnPoint = SpawnPoints[(int)Random.Range(0, SpawnPoints.Count - 1)]; 
    Instantiate(FirePrefab, selectedSpawnPoint.position, selectedSpawnPoint.rotation); 
} 

Bu çözüm için izin verecek İhtiyacınız olursa, potansiyel olarak birden fazla yangın nesnesini doğurabilirsiniz. Eğer sahnede sadece bir yangın nesnesine sahip olursanız, bir alternatif olurdu. Bir prefabrik sistemden örnek almak yerine, nesne zaten sahnede ve sahnenin başlangıcında sadece spawn noktalarından birine götürüyorsun.

public Transform[] SpawnPoints; 

void Start() { 
    Transform selectedSpawnPoint = SpawnPoints[(int)Random.Range(0, SpawnPoints.Count - 1)]; 
    transform.position = selectedSpawnPoint.position; 
    transform.rotation = selectedSpawnPoint.rotation; 
} 
+0

ben bu çizginin üzerinde dek iyi gidiyorum: Yangın nesnenin kendisinde bir örnek komut dosyası "bir tane oluşturmanız gerektiğinde Şimdi, sadece örneğini (prefabVar) aramak için prefabrik bir kopyasını oluşturun." ama bir sahnede nasıl rastgele yapabilirim? Her şeyden önce, bu prefabrikleri, silinmeden önce sahnedeki belirli bir yere yerleştirmek zorundayız. İkinci olarak, bu seviye yüklendiğinde veya yeniden başlatıldığında, bunu rastgele bir yerde nasıl yapabiliriz. –

+0

@FarhanAli Ne demek istediğini bilmiyorum – Steven

+0

Üzgünüz, bu yorumu siz yazıyordum –

İlgili konular