@Zieroo

C# код улучшения персонажа в Unity. Поможете?

Здравствуйте! У меня сразу два вопроса
Введение: я начал разработку кликера с монстрами и героями. Когда дело дошло до улучшения героя DPS (урон в секунду), начались проблемы. Я сделал bool, который означает, что персонаж уже появился и возник вопрос как сделать так, чтобы он активировался когда персонаж появляется? Я оставил эту проблему на потом тк bool публичный и я пока мог включать его вручную. И сразу столкнулся со второй проблемой, а именно той, что после того как я покупал данного персонажа, он появлялся и начинал стрелять, я включал bool UpTime и по нажатию кнопки деньги снимаются, а персонаж не улучшается! СРАЗУ ПРОШУ ПРОЩЕНИЯ ЗА КРИВОЙ КОД, Я НОВИЧОК и скидываю весь код, чтобы вам было проще разобраться
(Информацию я искал 2 дня и ничего не нашел, очень нужна ваша помощь)
Вопросы: 1. Как включать bool по нажатию кнопки?
2. Как сделать так, чтобы персонаж улучшался?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class UpButtonHelper : MonoBehaviour
{
    public Text DamageText;
    public Text PriceText;
    public int Damage = 1;
    public int Price = 10;
    public bool IsHero;
    public bool IsRuby;
    public bool UpTime;
    public GameObject HeroPrefab;
    public float X, Y, Z, Mult;
    GameHelper _gameHelper;
    HeroHelper _heroHelper;
    BulletHelper _bulletHelper;

    // Start is called before the first frame update
    void Start()
    {
        _gameHelper = GameObject.FindObjectOfType<GameHelper>();
        _heroHelper = GameObject.FindObjectOfType<HeroHelper>();
        _bulletHelper = GameObject.FindObjectOfType<BulletHelper>();
        DamageText.text = "+" + Damage.ToString();
        PriceText.text = Price.ToString();
    }

    // Update is called once per frame
    void Update()
    {
            DamageText.text = "+" + Damage.ToString();
            PriceText.text = Price.ToString();
    }

    public void UpClick()
    {
        if (!IsRuby && _gameHelper.PlayerGold >= Price || IsRuby && _gameHelper.PlayerRuby >= Price)
        {
            if (!IsRuby)
            {
                _gameHelper.PlayerGold -= Price;
            }
            else
            {
                _gameHelper.PlayerRuby -= Price;
            }

            if (IsHero == false)
            {
                _gameHelper.PlayerDamage += Damage;
            }
            else
            {
                if (UpTime == false)
                {
                    GameObject hero = Instantiate(HeroPrefab) as GameObject;
                    Vector2 heroPos = new Vector2(X, Y);
                    hero.transform.position = heroPos;
                }
                _heroHelper.Damage += Damage;
                Damage = Damage * 2;
            }
        }
    }
}
  • Вопрос задан
  • 164 просмотра
Пригласить эксперта
Ответы на вопрос 2
DanceM
@DanceM Куратор тега Unity Game Engine
Кто хочет -ищет способ, кто не хочет -ищет причину
1.
как сделать так, чтобы он активировался когда персонаж появляется?

Зависит от механики появления персонажа. Если я правильно понял вопрос, то например в Start() у персонажа написать (ну либо вызвать по нажатию кнопки):
FindObjectOfType<UpButtonHelper>().IsHero = true;.

2.
Сразу бросается в глаза потенциальная ошибка здесь:
if (!IsRuby && _gameHelper.PlayerGold >= Price || IsRuby && _gameHelper.PlayerRuby >= Price)

Наверное вы хотели сделать так:
if ((!IsRuby && _gameHelper.PlayerGold >= Price) || (IsRuby && _gameHelper.PlayerRuby >= Price))


В остальном - мне тяжело понять задуманную вами логику, как-то всё в кучу навалено. Попробуйте разбить все действия по методам, с полными названиями, может и вам станет понятней, что к чему. Скажем, чтобы получилось что-то вроде:
...
var goldWasSpent = !IsRuby && _gameHelper.PlayerGold >= Price;

if(goldWasSpent || rubyWasSpent)
{
  if(heroIsPresent)
    IncreaseHeroDamage();
  else
    CreateHero();
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы