Unity5中的CS0120错误

本文关键字:错误 CS0120 中的 Unity5 | 更新日期: 2023-09-27 18:12:30

我正在Unity5上制作隐身教程。当我在写"Alarm Light"脚本时,这个错误出现了

Assets/AlarmLight.cs(28,31):错误CS0120:需要对象引用来访问非静态成员' UnityEngine.Light.intensity'

这是整个脚本;

using UnityEngine;
using System.Collections;
    public class AlarmLight : MonoBehaviour {
    public float fadeSpeed = 2f;
    public float highIntensity = 2f;
    public float lowIntensity = 0.5f;
    public float changeMargin = 0.2f;
    public bool alarmOn;

    private float targetIntensity;
    void Awake(){
        GetComponent<Light>().intensity = 0f;
        targetIntensity = highIntensity;
    }
    void Update()
    {
        if (alarmOn) {
            GetComponent<Light>().intensity = Mathf.Lerp (GetComponent<Light>().intensity, targetIntensity, fadeSpeed * Time.deltaTime);
            CheckTargetIntensity ();
        }
        else
            {
            Light.intensity = Mathf.Lerp (GetComponent<Light>().intensity, 0f, fadeSpeed * Time.deltaTime);
        }
        }

    void CheckTargetIntensity (){
        if (Mathf.Abs (targetIntensity - GetComponent<Light>().intensity) < changeMargin) {
            if (targetIntensity == highIntensity) {
                targetIntensity = lowIntensity;
            }
            else {
                targetIntensity = highIntensity;
            }
        }
    }
}

Unity5中的CS0120错误

基本上,编译器告诉你的是你试图使用静态成员这样的实例成员,这显然是不正确的。

看看你代码中的这一行

 else {
     Light.intensity = Mathf.Lerp (GetComponent<Light>().intensity, 0f, fadeSpeed * Time.deltaTime);
 }

在右边,你使用GetComponent<Light>().intensity,这是获取单个光强度的正确方法。

然而,在左侧,您使用的是Light.intensityLight类没有任何名为intensity的静态成员,因此出现错误。

将代码改为

else {
    GetComponent<Light>().intensity = Mathf.Lerp (GetComponent<Light>().intensity, 0f, fadeSpeed * Time.deltaTime);
}

和你的错误应该消失。

这样想。你可以分别改变每一盏灯的强度,对吗?因此,它必须是类实例的成员,而不是类本身的成员。

如果改变一个值会影响使用它的所有东西,(比如Physics.gravity),那么这些都是类的静态成员。记住这一点,你就不会再出现这个问题了。