需要帮助找出为什么我的代码不起作用

时间:2019-09-10 08:51:23

标签: c# unity3d

我目前正在为一个学校项目工作,并且使用我到目前为止编写的代码,我看不出为什么我不能做我想做的事。

它的基本思想是我正在制作一个应用程序来跟踪某人在桌游中拥有多少“资源”。该应用程序每个资源有4个按钮,分别是+ 1,+ 5,-1和-5。当一个人单击一个按钮时,资源图片旁边的文本应随玩家剩余的资源量而更新。 (我还没有做到这一点,也不知道该怎么做。)

我的问题是有人按下按钮时添加/删除资源量。它们不是使所有按钮都具有相同的值,而是都作用于相同的变量,但是具有不同的变量 (即,当我按+1 3x时,它显示3,但当我单击+5时,它显示5,然后当我再次按+1时,它显示4。再次按+5,它显示

我什至想不出其他方法来做...我尝试了不同的加法方法,但是它们都导致相同的问题。

public int totalWood = 0;

public void addOneWood()
{
    totalWood += 1;
    Debug.Log("Amount added!");
    print(totalWood);
}
public void addFiveWood()
{
    totalWood += 5;
    Debug.Log("Amount added!");
    print(totalWood);
}
public void delOneWood()
{
    totalWood -= 1;
    Debug.Log("Amount Removed!");
    print(totalWood);
}
public void delFiveWood()
{
    totalWood -= 5;
    Debug.Log("Amount Removed!");
    print(totalWood);
}

预期结果: 按+1 x3显示3,按+5 x1应显示8。 再次按+1 x1应该显示9。

现实: 按+1 x3显示3,按+5显示5。 再次按+1 x1将显示4.。

2 个答案:

答案 0 :(得分:4)

只需使用

public static int totalWood = 0; 

说明:

这是因为按钮按下时触发的事件将实例化定义的类的新对象,因此,每次单击时,您将通过ZERO初始化totalWood!

注意:该值将在应用程序启动时保留,并且如果由于某种原因关闭了该应用程序,它将再次重新初始化为零,如果您需要永久存储,则必须使用一种数据管理方法,例如JSON,DBMS等

答案 1 :(得分:3)

对我来说很好。我假设您已将此脚本附加到场景中的每个按钮上。因此,请勿犯此错误。只需将此脚本添加到一个GameObject并使所有按钮都引用该GameObject。希望你明白了。我已经用按键(A,S,Y,X)更新了您的脚本,以测试“ totalWood”值。自己测试。

更新:文本属性

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; //Very important

public class Wood : MonoBehaviour
{

    public int totalWood = 0;
    public Text totalWoodText; //attach your text component here
    void Update()
    {
        totalWoodText.text = totalWood.ToString(); //just one line command

        if(Input.GetKeyDown(KeyCode.A))
        {
            addOneWood();
        }

        if(Input.GetKeyDown(KeyCode.S))
        {
            addFiveWood();
        }

        if(Input.GetKeyDown(KeyCode.Y))
        {
            delOneWood();
        }

        if(Input.GetKeyDown(KeyCode.X))
        {
            delFiveWood();
        }


    }
    public void addOneWood()
    {
        totalWood += 1;
        Debug.Log("Amount added!");
        print(totalWood);
    }
    public void addFiveWood()
    {
        totalWood += 5;
        Debug.Log("Amount added!");
        print(totalWood);
    }
    public void delOneWood()
    {
        totalWood -= 1;
        Debug.Log("Amount Removed!");
        print(totalWood);
    }
    public void delFiveWood()
    {
        totalWood -= 5;
        Debug.Log("Amount Removed!");
        print(totalWood);
    }
}