【问题标题】:Need help finding out why my code doesn't work需要帮助找出为什么我的代码不起作用
【发布时间】:2019-09-10 08:51:23
【问题描述】:

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

它的基本思想是我正在制作一个应用程序来跟踪某人在棋盘游戏中拥有多少“资源”。该应用程序每个资源有 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。

【问题讨论】:

  • 如何在更广泛的应用环境中使用此类
  • 你是如何调用这些函数的?通过点击按钮还是通过按键?
  • 您可能正在将脚本附加到每个按钮,您可能需要在玩家级别存储资源并在按下按钮时更新他们的木材资源,我希望能有所帮助
  • @Flexicoder 我起初给所有单独的按钮一个不同的脚本,通过将脚本添加到画布并将其从单独的按钮中删除来撤消这一切,这样我就无法启动 clickevent无法识别按钮的脚本。 (希望我说清楚一点?)
  • @ReinierJongerius 我不认为你做得对。这是一个教程:youtube.com/watch?v=3tQsLD9GWrw

标签: c# unity3d


【解决方案1】:

随便用

public static int totalWood = 0; 

解释:

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

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

【讨论】:

  • 嘿,我还有一个问题...我在网上看了一点,但我不明白其他人给出的任何方法......你能给出一个解释/例子吗?这是我现在拥有的代码: public void totalWoodCount() { totalWood.ToString(woodAmount); }
  • @Saif 非常感谢!一开始我在设置它时遇到了一些麻烦,但最后还是设法找到了它:)非常感谢你们的帮助! (我也可能会带着未来的问题来找你:P)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2014-10-01
    • 2015-05-17
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    相关资源
    最近更新 更多