public void UpgradeByExp(System.Action then) { if (_baseCharacter == null || _baseCharacter is Object && _baseCharacter.Equals(null)) { return; } _currency.PurchaseByExperencePoint(upgradedCost.ExperencePoint, () => { _baseCharacter.attackPower *= (1 + upgradedAttackRate); _baseCharacter.hp *= (1 + upgradedHpRate); ++_baseCharacter.level; _baseCharacter.AssignUpgradedDisplay(); attackPower = _baseCharacter.attackPower; hp = _baseCharacter.hp; level = _baseCharacter.level; display = _baseCharacter.displayPrefab; var upgradedGoldRate = GetUpgradedCostRate(); _baseCharacter.upgradedCost.Gold *= (1 + upgradedGoldRate); upgradedCost = _baseCharacter.upgradedCost; if (then != null) { then(); } }); }