更新: 答案中的代码没有起作用,但我有一些进展,但我仍然遇到问题。更新。
这是我的UpgradeUI脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
OnClick函数也可以与Debug.Log一起使用。下面的代码是Stats脚本,它也更新了我的HealthUI。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
[Serializable]
public class Stats
{
public static Stats st;
[SerializeField]
private BarScript bar;
public float maxVal;
public float currentVal;
public int playerDamage = 20;
public float CurrentVal
{
get
{
return currentVal;
}
set
{
this.currentVal = Mathf.Clamp(value, 0, maxVal);
bar.Value = currentVal;
}
}
public float MaxVal
{
get
{
return maxVal;
}
set
{
this.maxVal = value;
bar.MaxValue = value;
}
}
public void Initialize()
{
this.MaxVal = maxVal;
this.CurrentVal = currentVal;
}
}
我做了一点进步。我放置了这段代码:
public void HpUp () { stats.maxVal += 20; stats.currentVal += 20; }
public void DmgUp() { stats.playerDamage += 10; }
进入我的PlayerManager,它与我共享的Stats脚本连接,我的健康状况确实更新了。我删除了UpgradeMenuUI。现在的问题是我的伤害没有更新。实际上它更新了,但价值并没有达到我需要的地方。我添加了一个
public int playerDamage;
在我的Stats脚本中。在我的伤害脚本中,我计算了我的玩家和敌人的伤害,我改变了
aiManager.Enemy1Damage(playerDamage); to
aiManager.Enemy1Damage(stats.playerDamage);
我将我的playerDamage从Stats调用到我的Damage脚本中:
public Stats stats;
和
public void Awake()
{
stats = new Stats();
}
所以问题是如果我改变我的Stats脚本中的playerDamage
this: public int playerDamage;
到
public int playerDamage = 20;
当我击中AI时,该值确实有效并且我的玩家伤害确实是20。但是在检查员中,我的损坏(统计脚本中的公共int)是0,如果我按下升级损坏按钮,它会上升10(这是我在我的PlayerManager脚本中设置的内容:
public void DmgUp()
{
stats.playerDamage += 10;
}
),但这并没有以任何方式影响价值20.所以它只是没用,就像抽空气一样。我不知道如何使公共int playerDamage从OnClick更新。如果让它只是playerDamage;没有数字没有更新,损害赔偿为0。
答案 0 :(得分:1)
您将统计数据作为单身人士,但正在按钮上访问它的新实例。尝试更改:
public void HpUpgrade()
{
stats.maxVal = (int)(stats.Instance.maxVal += hpUp);
}
public void DmgUpgrade()
{
dmg.playerDamage = (int)(stats.Instance.maxVal += dmgUp);
}
我无法确定您是否确认您的OnClick事件正在触发按钮。如果他们不是,请确保您的场景中有EventSystem游戏对象。