Unity - 一个不在其他类中工作的类的方法,但其他类的方法

时间:2018-03-28 14:38:46

标签: c# unity3d

所以我试图使用一个名为SetPlayerMoney()的方法,在MoneyCounterController(see below)中声明并且它不能在特定的类中工作,我最好告诉你:

首先,这是BuildingController文件:

public class BuildingController : MonoBehaviour
{
    private BuildingControllerUtils buildingUtils;
    public MoneyCounterController moneyCounterController;

    // Use this for initialization
    void Start () {
        buildingUtils = new BuildingControllerUtils(this, "Edificio", "InGame/Edificio1/");


        moneyCounterController = GameObject.Find("MoneyCounter").gameObject.GetComponent<MoneyCounterController>();

  //Here the method execute correctly
 moneyCounterController.SetPlayerMoney(25000);

    }

    // Update is called once per frame
    void Update () {

    }

    void OnMouseDown()
    {
        buildingUtils.UpgradeBuilding(moneyCounterController);
    }
}

MoneyCounterController文件是管理玩家资金的所有显示信息的类,这里是代码:

public class MoneyCounterController : MonoBehaviour
{
    public Text MoneyCounterTxt;
    public int playerMoney;

    // Use this for initialization
    void Start ()
    {                       
        MoneyCounterTxt = GetComponent<Text>();
        playerMoney = 0;

  //Here it executes the method
        SetPlayerMoney(playerMoney);
    }

    // Update is called once per frame
    void Update () {
        if (Input.anyKeyDown)
        {
            playerMoney = playerMoney + 10;
            SetPlayerMoney(playerMoney);

            //Debug.Log("Se cambio el numero de dinero!");
        }
    }

    public void SetPlayerMoney(int playerMoneyParam)
    {
        MoneyCounterTxt.text = playerMoneyParam.ToString();
    }

    public int GetPlayerMoney()
    {
        return playerMoney;
    }
}

但是当问题开始的时候,当我在一个utils类中调用它时,它不会使用SetPlayerMoney方法,但是GetPlayerMoney方法确实。 这是代码:

public class BuildingControllerUtils
{       

    // Use this for initialization
    public BuildingControllerUtils(MonoBehaviour behaviour, String assetBuildingName, String spritePath)
    {       

    }

    public void UpgradeBuilding(MoneyCounterController moneyCounterController)
    {                   
        int playerMoney = moneyCounterController.GetPlayerMoney();

  //THE METHOD HERE DOESN'T WORK
 moneyCounterController.SetPlayerMoney(25000);

    }
}

提前谢谢。

编辑:我已经简化了Utils课程,以便更加关注不起作用的方法。

1 个答案:

答案 0 :(得分:0)

我终于找到了这个问题的解决方案,它是Update()类的MoneyCounterController.cs方法,当我按下任意键(Input.GetKeyDown())时,它比任何脚本更快地更新钱可以修改。所以最终的代码看起来像这样:

// Update is called once per frame
    void Update () {
        if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            playerMoney = playerMoney + 10;
            SetPlayerMoney(playerMoney);

            //Debug.Log("Se cambio el numero de dinero!");
        }
    }