Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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# OnMouseDown()空引用异常_C#_Unity3d_Onmousedown - Fatal编程技术网

C# OnMouseDown()空引用异常

C# OnMouseDown()空引用异常,c#,unity3d,onmousedown,C#,Unity3d,Onmousedown,我需要当我点击游戏对象时,商店会打开sop,它下面有几个按钮,但它给了我: “NullReferenceException:对象引用未设置为对象的实例 TowerNode.OnMouseDown()(位于Assets/Scripts/TowerNode.cs:51) UnityEngine.SendMouseEvents:DoSendMouseEvents(Int32)” 我不明白为什么。您得到的错误意味着OnMouseDown函数中的对象在执行时为空: NullReferenceExcepti

我需要当我点击游戏对象时,商店会打开sop,它下面有几个按钮,但它给了我:

“NullReferenceException:对象引用未设置为对象的实例 TowerNode.OnMouseDown()(位于Assets/Scripts/TowerNode.cs:51) UnityEngine.SendMouseEvents:DoSendMouseEvents(Int32)”


我不明白为什么。

您得到的错误意味着
OnMouseDown
函数中的对象在执行时为空:

NullReferenceException:对象引用未设置为对象TowerNode.OnMouseDown()的实例(位于Assets/Scripts/TowerNode.cs:51)

您应该查看
TowerNode.cs
的第51行,并确定该行中哪些内容可以为空。
shop
buildManager
是否可以为空?在初始化
TowerNode
对象之前,可能会触发此事件


似乎您正试图从完全无关的游戏对象访问组件(
Shop
)。如果希望所有的
TowerNode
对象都引用
商店
,则可以使用。但这并不是真正的建议;似乎有更好的方法链接这两个对象,但我不确定您的用例。

您得到的错误意味着
OnMouseDown
函数中的对象在执行时为空:

NullReferenceException:对象引用未设置为对象TowerNode.OnMouseDown()的实例(位于Assets/Scripts/TowerNode.cs:51)

您应该查看
TowerNode.cs
的第51行,并确定该行中哪些内容可以为空。
shop
buildManager
是否可以为空?在初始化
TowerNode
对象之前,可能会触发此事件


似乎您正试图从完全无关的游戏对象访问组件(
Shop
)。如果希望所有的
TowerNode
对象都引用
商店
,则可以使用。但这并不是真正的建议;似乎有更好的方法链接这两个对象,但我不确定您的用例。

什么是
BuildManager.instance
?看起来buildManager为空。问题不在这里。这是我的buildManager,它在我的“shop.onEnable();”我认为这不会解决您的问题,但仅供参考,onEnable()是一个内置的unity函数。我会避免使用它作为函数名。iv更改了函数名,但它仍然无法工作执行相同的问题iv更改了函数名,但它仍然无法工作。什么是
BuildManager.instance
?看起来buildManager为空。问题不在这里。这是我的buildManager,它在我的“shop.onEnable();”我认为这不会解决您的问题,但仅供参考,onEnable()是一个内置的unity函数。我会避免使用它作为函数名。iv更改了函数名,但它仍然无法工作执行相同的问题iv更改了函数名,但它仍然无法工作。shop.onEnable();出于某种原因,这就是问题所在。你能帮我理解为什么它不起作用吗?检查你抓取组件时的商店是否为空,或者在OneTable中使用的任何底层对象是否为空。按钮本身可能处于使其为空的状态吗?您在
TowerNode
Start
函数中设置了对
shop
的引用,这意味着以下情况之一:a)未调用
Start
函数,意味着您的
TowerNode
对象尚未初始化。b) 游戏对象上没有
Shop
。是否将
Shop
组件添加到
TowerNode
组件旁边的游戏对象上?iv已选中,并且已调用start,我是指其工作。在游戏对象的UI面板上有一个商店,里面有按钮;它工作正常,但用户界面无法打开商店;出于某种原因,这就是问题所在。你能帮我理解为什么它不起作用吗?检查你抓取组件时的商店是否为空,或者在OneTable中使用的任何底层对象是否为空。按钮本身可能处于使其为空的状态吗?您在
TowerNode
Start
函数中设置了对
shop
的引用,这意味着以下情况之一:a)未调用
Start
函数,意味着您的
TowerNode
对象尚未初始化。b) 游戏对象上没有
Shop
。是否将
Shop
组件添加到
TowerNode
组件旁边的游戏对象上?iv已选中,并且已调用start,我是指其工作。在游戏对象的UI面板上有一个商店,里面有按钮;它正在工作,但用户界面无法打开
public class TowerNode : MonoBehaviour {

public bool IsShopOpen=false;

//Z position
public Vector3 positionOffSet;

//colors
public Color hoverColor;
private Color startColor;

//GameObjects
public GameObject turret;

//shop
public Shop shop;

//Build Manager
BuildManager buildManager;

void Start()
{
    rend=GetComponent<Renderer>();
    startColor = rend.material.color;
    buildManager = BuildManager.instance;
    shop = GetComponent<Shop>();
}


//When mouse is on the turret node
public void OnMouseDown()
{    
    Debug.Log("Mouse is Down");
    bool IsShopOpen  = true;
    if (IsShopOpen == true)
    {
        Debug.Log("shop is open");
        shop.onEnable();
    }

    if (EventSystem.current.IsPointerOverGameObject())
    {          
        return;
    }
    if (!buildManager.CanBuild)
    {
        return;
    }
    if (turret != null)
    {
        Debug.Log("Cant Build Here!!!");
        return;
    }       

    buildManager.BuildTurretOn(this);

}
public class Shop : MonoBehaviour
{
public TurretBlueprint Archery;
public TurretBlueprint Treb;
public TurretBlueprint Workamp;
public TurretBlueprint Barracks;

public Button Archeryy;
public Button Trebb;
public Button WorkCampp;
public Button Barrackss;

BuildManager buildManager;


void Start()
{
    buildManager = BuildManager.instance;
    disableAllButtons();
    //OnEnable();
}

public void SelectArchery()
{
    buildManager.SelectTurretToBuild(Archery);
    Debug.Log("archery!!!!");

}
public void SelectTreb()
{
    buildManager.SelectTurretToBuild(Treb);
    Debug.Log("Treb!!!!");
}
public void SelectWorkamp()
{
    buildManager.SelectTurretToBuild(Workamp);
    Debug.Log("Work Camp!!!!");
}
public void SelectBarracks()
{
    buildManager.SelectTurretToBuild(Barracks);
    Debug.Log("Barracks!!!!");
}


public void onEnable()
{
    Archeryy.gameObject.SetActive(true);
    Trebb.gameObject.SetActive(true);
    WorkCampp.gameObject.SetActive(true);
    Barrackss.gameObject.SetActive(true);

}

public void disableAllButtons()
{
    Archeryy.gameObject.SetActive(false);
    Trebb.gameObject.SetActive(false);
    WorkCampp.gameObject.SetActive(false);
    Barrackss.gameObject.SetActive(false);
}

}