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# 我想在两个脚本中使用一个int,在第二个脚本中减少它_C#_Unity3d_Variables_Int_Collider - Fatal编程技术网

C# 我想在两个脚本中使用一个int,在第二个脚本中减少它

C# 我想在两个脚本中使用一个int,在第二个脚本中减少它,c#,unity3d,variables,int,collider,C#,Unity3d,Variables,Int,Collider,我想在两个脚本中使用这个int:public int-wood 我希望两个脚本中的int值相同 这是我的第一个脚本: public class Tree : MonoBehaviour { public int wood; private void OnTriggerEnter2D(Collider2D collision) { wood += 1; } } 这是我的第二个脚本,我希望在其中使用木材: public cl

我想在两个脚本中使用这个int:
public int-wood
我希望两个脚本中的int值相同

这是我的第一个脚本:

public class Tree : 
  
MonoBehaviour { public int wood;
    
     private void OnTriggerEnter2D(Collider2D collision)
     {
         wood += 1;
     }
    }
这是我的第二个脚本,我希望在其中使用木材:

public class Base : MonoBehaviour {

 private void OnTriggerEnter2D(Collider2D collision)
 {
 }
}

我想减少
OnTriggerEnter2D
中的木材值。如何操作?

您可以将按钮组件添加到游戏对象中。(若要在代码中获取此组件,请使用
button btn=gameobject.GetComponent();
。若要检测对按钮的单击,可以使用按钮具有的事件

void Start(){
btn.onClick.AddListener(按钮单击);
}
void按钮单击(){
//代码
}
还可以添加和函数来创建按钮(这只需要碰撞器组件,而不需要按钮组件)

void OnMouseDown(){
    clicking = true;
}
void OnMouseUp(){
    clicking = false;
}

单击按钮时,它会抛出一个事件。 因此,您需要注册在触发此事件时要执行的操作

有多种方法,但其中一种可能是:

buttonVariable.onClick.AddListener(OnButtonDoSomething);
使用将是:

因此,您需要在任何脚本中的
Start
OnEnable
Awake
方法上声明此项。然后使用
按钮
引用,以便存储
按钮变量
,最后声明方法
onbuttondooming

为了适应您的问题,您将存储一个名为
buttonGotClicked
的布尔变量,并在新创建的方法中设置此布尔值,如下所示:

private void OnButtonDoSomething()
{
    buttonGotClicked = true;
}

然后您可以执行
if(buttonGotClicked).

我在start void中编写了Debug.Log(“HI”),但在控制台中它没有说任何东西,我编写了:{bool clicking=false;void OnMouseDown(){clicking=true;}void Update(){if(clicking==true){Debug.Log(“clicking”);}}}游戏对象是否附加了碰撞器?我说的两种方法都应该单独执行。但是,您还提到void Start不起作用,脚本是否附加到游戏对象(即场景中的)上。我添加了public new GameObject GameObject;但是它在cosole中没有说任何东西。其他代码是sami使用的其他解决方案按钮;public new GameObject GameObject;void Update(){Button.onClick.AddListener(onClick);}void onClick(){Destroy(GameObject);}但是该对象没有首先得到destroyerFirst。您正在创建一个名为“gameobject”的新gameobject。通常gameobject会引用脚本设置的对象,但是您已经用新gameobject重置了它。尝试使用this.gameobject来销毁按钮。其次,将
按钮.onClick.AddListener(onClick);
放入
void Start()
,否则该按钮将继续将侦听器从该按钮添加到空中。最后,尝试将debug.log放入onclick函数中,查看它是否正在运行。
private void OnButtonDoSomething()
{
    buttonGotClicked = true;
}