Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 统一检查是否触发_C#_Unity3d - Fatal编程技术网

C# 统一检查是否触发

C# 统一检查是否触发,c#,unity3d,C#,Unity3d,我正在检查开关是否打开。通常,我在inspector中使用public Toggle myToggle,但我将脚本附加到Toggle中,并且可能错误地使用了GetComponent() 我在if(m_Toggle.isOn)行中得到NullReferenceException:objectreference未设置为对象的实例 这是附加到切换的脚本 using System.Collections; using System.Collections.Generic; using UnityEngi

我正在检查开关是否打开。通常,我在inspector中使用
public Toggle myToggle
,但我将脚本附加到
Toggle
中,并且可能错误地使用了
GetComponent()

我在
if(m_Toggle.isOn)
行中得到
NullReferenceException:objectreference未设置为对象的实例

这是附加到
切换的脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ToggleSound : MonoBehaviour {

    Toggle m_Toggle;

    // Use this for initialization
    void Start () {
        m_Toggle = GetComponent<Toggle>();
        Debug.Log(m_Toggle);

    }

    public ToggleSound ()
    {
        if(m_Toggle.isOn)
        {
            AudioManager.Instance.SetVolume(0, -80);
        }
        else
        {
            AudioManager.Instance.SetVolume(0, 0);
        }
    }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
使用UnityEngine.UI;
公共类切换声音:单行为{
切换m_切换;
//用于初始化
无效开始(){
m_Toggle=GetComponent();
Log(m_切换);
}
公共切换声音()
{
if(m_Toggle.isOn)
{
AudioManager.Instance.SetVolume(0,-80);
}
其他的
{
AudioManager.Instance.SetVolume(0,0);
}
}
}

在Unity中选择您的对象并将其
visible
属性设置为true。

显而易见的答案是GetComponent()没有找到切换实例

必须对MonoBehavior的实例调用GetComponent。由于您没有指定要调用它的实例,因此您当前正在使用的ToggleSound实例上调用GetComponent。实际上,您可以调用
this.GetComponent


ToggleSound中唯一的切换是m_Toggle,目前尚未初始化。因此,返回值被设置为更合理的null。这相当于程序员把眼镜放在鼻子上时想知道眼镜在哪里。

public-ToggleSound()
更改为类似
public-void-button-click()
。 在inspector中,将此函数添加到值更改时的
框中


我确实想到了,谢谢。我了解到之前的困难:-)显而易见的答案是
GetComponent()
找不到切换实例。由于没有指定要调用它的实例,因此将其称为
this.GetComponent
。ToggleSound中唯一的切换是m_Toggle,目前尚未初始化。如果可以的话,您可以使用bog标准类字段来存储引用。为什么要创建
public-ToggleSound()
?您想什么时候检查切换是否打开?它正在查找正确的实例。我是
Debug.Log(m_Toggle)可以肯定。我之所以有
public-ToggleSound()
是因为我把它附加到了切换检查器中的按钮click上,以便在切换为clickedIt时调用它。以下是
调试的结果-
切换声音(UnityEngine.UI.Toggle)UnityEngine.Debug:Log(Object)ToggleSound:Start()(位于Assets/ToggleSound.cs:13)
我把你的观点作为一般规则,我已经更新了我的代码,将
这个.GetComponent
@KeithPower包含在内。我的观点是,这个.GetComponent很可能是错误的。它会问“m_Toggle
有什么值?”谢谢。是因为它与类的名称相同吗?是的,您还应该添加
void
,因为您没有返回类型。