Çözüldü OnEnable fonksiyonu içinde if koşulu kullanılarak ne yapılmak istenmiş?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

shiralphe

Hectopat
Katılım
21 Kasım 2020
Mesajlar
318
Çözümler
1
Daha fazla  
Cinsiyet
Erkek
C#:
public class Attractor : MonoBehaviour {

    const float G = 667.4f;

    public static List<Attractor> Attractors;

    public Rigidbody rb;

    void FixedUpdate ()
    {
        foreach (Attractor attractor in Attractors)
        {
            if (attractor != this)
                Attract(attractor);
        }
    }

    void OnEnable ()
    {
        if (Attractors == null)
            Attractors = new List<Attractor>();

        Attractors.Add(this);
    }

    void OnDisable ()
    {
        Attractors.Remove(this);
    }

    void Attract (Attractor objToAttract)
    {
        Rigidbody rbToAttract = objToAttract.rb;

        Vector3 direction = rb.position - rbToAttract.position;
        float distance = direction.magnitude;

        if (distance == 0f)
            return;

        float forceMagnitude = G * (rb.mass * rbToAttract.mass) / Mathf.Pow(distance, 2);
        Vector3 force = direction.normalized * forceMagnitude;

        rbToAttract.AddForce(force);
    }

}

OnEnable fonksiyonu içinde if koşulu kullanılarak ne yapılmak istenmiş? Tam anlayamadım.
 
Son düzenleyen: Moderatör:
Çözüm
Kod:
public static List<Attractor> Attractors;
bu kodu yazdığında Attractors adında bir alan açarsın sadece, bu alanın içi boştur.

Kod:
Attractors = new List<Attractor>();

bunu yazınca da bu alanın içine bir şey koymuş olursun.

Mesela projenin başka bir yerinde yine başka bir attractors listesi olsun diyelim, onunla da doldurabilirsin bu fieldı.


Şunu bi oku.
C#:
public class Attractor : MonoBehaviour {

    const float G = 667.4f;

    public static List<Attractor> Attractors;

    public Rigidbody rb;

    void FixedUpdate ()
    {
        foreach (Attractor attractor in Attractors)
        {
            if (attractor != this)
                Attract(attractor);
        }
    }

    void OnEnable ()
    {
        if (Attractors == null)
            Attractors = new List<Attractor>();

        Attractors.Add(this);
    }

    void OnDisable ()
    {
        Attractors.Remove(this);
    }

    void Attract (Attractor objToAttract)
    {
        Rigidbody rbToAttract = objToAttract.rb;

        Vector3 direction = rb.position - rbToAttract.position;
        float distance = direction.magnitude;

        if (distance == 0f)
            return;

        float forceMagnitude = G * (rb.mass * rbToAttract.mass) / Mathf.Pow(distance, 2);
        Vector3 force = direction.normalized * forceMagnitude;

        rbToAttract.AddForce(force);
    }

}

OnEnable fonksiyonu içinde if koşulu kullanılarak ne yapılmak istenmiş? Tam anlayamadım.
Attractors listesi yoksa onun ilk kurulumunu yapıyor.
 
Kod:
public static List<Attractor> Attractors;
bu kodu yazdığında Attractors adında bir alan açarsın sadece, bu alanın içi boştur.

Kod:
Attractors = new List<Attractor>();

bunu yazınca da bu alanın içine bir şey koymuş olursun.

Mesela projenin başka bir yerinde yine başka bir attractors listesi olsun diyelim, onunla da doldurabilirsin bu fieldı.


Şunu bi oku.
 
Çözüm
Kod:
public static List<Attractor> Attractors;
bu kodu yazdığında Attractors adında bir alan açarsın sadece, bu alanın içi boştur.

Kod:
Attractors = new List<Attractor>();

bunu yazınca da bu alanın içine bir şey koymuş olursun.

Mesela projenin başka bir yerinde yine başka bir attractors listesi olsun diyelim, onunla da doldurabilirsin bu fieldı.


Şunu bi oku.
Evet şimdi anladım, teşekkürler.
 

Technopat Haberler

Geri
Yukarı