2

我目前正在为学校做一个项目,到目前为止,我已经编写了代码,我不明白为什么我不能做我想做的事。

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

我的问题是当有人按下按钮时添加/删除资源量。与其让所有按钮计数相同的值,它们都在相同的变量上工作,但使用不同的变量(IE 当我按 +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。

4

2 回答 2

4

只需使用

public static int totalWood = 0; 

解释:

这是因为按钮压力触发的事件将实例化已定义类的新对象,因此每次单击时您都会将 totalWood 初始化为零!

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

于 2019-09-10T08:57:40.497 回答
3

这对我来说可以。我假设您已将此脚本附加到场景中的每个按钮。所以不要犯这个错误。只需将此脚本添加到一个游戏对象,并使所有按钮都引用此游戏对象。希望你明白了。我已使用按键 (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);
    }
}
于 2019-09-10T09:02:19.893 回答