访问非静态成员需要对象引用

Jam*_*ton 22 .net c# oop static member

我出现了这个错误,我不知道为什么......我试图查找它,人们说要创建类的对象或创建方法为静态...但我是不确定如何.

这是我的代码如下:

public class SoundManager : MonoBehaviour {

public List<AudioSource> audioSounds = new List<AudioSource>();
public double minTime = 0.5;

public static void playSound(AudioClip sourceSound, Vector3 objectPosition, int volume, float audioPitch, int dopplerLevel)
{
    bool playsound = false;
    foreach (AudioSource sound in audioSounds) // Loop through List with foreach
    {
        if (sourceSound.name != sound.name && sound.time <= minTime)
        {
            playsound = true;
        }
    }

    if(playsound) {
        AudioSource.PlayClipAtPoint(sourceSound, objectPosition);
    }
}
}
Run Code Online (Sandbox Code Playgroud)

Max*_*kov 32

您应该使audioSounds和minTime成员静态:

public static List<AudioSource> audioSounds = new List<AudioSource>();
public static double minTime = 0.5;
Run Code Online (Sandbox Code Playgroud)

但我会考虑使用单例对象而不是静态成员:

public class SoundManager : MonoBehaviour
{

    public List<AudioSource> audioSounds = new List<AudioSource>();
    public double minTime = 0.5;

    public static SoundManager Instance { get; private set; }

    void Awake()
    {
        Instance = this;
    }

    public void playSound(AudioClip sourceSound, Vector3 objectPosition, int volume, float audioPitch, int dopplerLevel)
    {    
        bool playsound = false;
        foreach (AudioSource sound in audioSounds) // Loop through List with foreach
        {  
            if (sourceSound.name != sound.name && sound.time <= minTime)
            {
                playsound = true;
            }
        }

        if(playsound) {
            AudioSource.PlayClipAtPoint(sourceSound, objectPosition);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)


Aag*_*age 8

我猜你在访问错误audioSoundsminTime,对不对?

问题是你不能访问instance membersstatic methods.这意味着,静态方法是一种只存在一次并且可以被所有其他对象使用的方法(如果它的访问修饰符允许它).

另一方面,为对象的每个实例创建实例成员.因此,如果您创建了十个实例,那么运行时如何知道所有这些实例,audioSounds它应该访问哪个列表?

与其他人一样说,让你的audioSoundsminTime静态的,或者你可以让你的方法的实例方法,如果你的设计允许它.