Saya ingin menyimpan referensi ke MinMaxCurve, sebuah struct di beberapa modul sistem partikel.

Saya memerlukan kemampuan ini untuk merujuk ke MinMaxCurve apa pun secara umum, daripada selalu berurusan dengan modul dan atribut tertentu.

Inilah intinya:

public class ParticleAttributeMultiplier : ParticleAttributeAdjuster {

    new private ParticleSystem particleSystem;
    private ParticleSystem.EmissionModule emission;
    private ParticleSystem.MinMaxCurve minMaxCurve;

    public override void Start () {
        particleSystem = GetComponent<ParticleSystem> ();
        emission = particleSystem.emission;
        minMaxCurve = emission.rateOverTime;
    }

    public override void Input (float intensity) {
        minMaxCurve = 1000f;
    }
}

Ini tidak berfungsi karena emisi dan rateOverTime keduanya struct, dikembalikan oleh nilai :

public struct EmissionModule
{
    // ... 
    public MinMaxCurve rateOverTime { get; set; } // also a struct
    // ... 
}

Apakah mungkin, dengan cara apa pun, untuk menyimpan referensi ke rateOverTime sebagai MinMaxCurve?


Ini tampaknya menjadi inti masalahnya:

// "A property or indexer may not be passed as an out or ref parameter"
ref ParticleSystem.MinMaxCurve minMaxCurve = ref emission.rateOverTime;

Sangat menghargai setiap jenius di luar sana yang dapat memecahkan masalah saya.

2
Corey Sanford 13 Agustus 2019, 23:24

1 menjawab

Jawaban Terbaik

Anda tidak bisa.

ParticleSystem.MinMaxCurve adalah structjenis nilai

Sama seperti misalnya Vector3 variabel disimpan oleh nilai tidak menggunakan referensi seperti halnya untuk class.

Satu-satunya cara adalah menyimpan referensi ke induk yang sesuai class yang dalam kasus Anda adalah referensi particleSystem dan mengakses nilai melaluinya. Anda bisa mendapatkan referensi ini disimpan dengan membuatnya

 [SerializeField] private ParticleSystem _particleSystem;

Dan seret melalui Inspektur.


Namun Anda dapat menyimpan dan menyesuaikan nilai ParticleSystem.MinMaxCurve generik melalui Inspektur jika itu yang Anda cari

[SerializeField] private ParticleSystem.MinMaxCurve minMaxCurve;
0
derHugo 14 Agustus 2019, 05:24