所以我试图使用一个名为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课程,以便更加关注不起作用的方法。
答案 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!");
}
}