В этой части я добавлю апгрейды для увеличения силы клика.
Получится примерно вот это:
Передвигаем его под первый дисплей и делаем шрифт обычным вместо жирного, потому что эта метрика несколько менее важная чем количество золота.
Теперь открываем GameManager скрипт.
Добавляем новую переменную для нашего дисплея.
public UnityEngine.UI.Text GoldPerClickDisplay;
В функцию Update прописываем обновление нашего нового дисплея, аналогично уже сделанному:
GoldPerClickDisplay.text = "GPC: " + goldPerClick;
В юнити добавляем скрипту GameManager наш дисплей.
В общем-то ничего сложного.
Еще заметил что стоит пофиксить 0 на 1 в дисплее на самой сцене, чтобы в глаза не бросалось.
Воткнул кнопку в правый верхний угол. Сделал размеры 200х100. Шрифт увеличил до 20. Если не будет влезать - подправим.
Он будет отвечать за вид кнопки апгрейда и за функцию покупки при нажатии на эту кнопку.
Подключаем текст написанный на кнопке, потому что именно туда мы будем выводить название, цену и мощность апгрейда.
public UnityEngine.UI.Text upgradeInfo;
Задаем базовую стоимость и текущую стоимость апгрейда. Текущую делаем приватной переменной, чтобы не маячила в юнити.
public float baseCost;
private float currentCost;
Задаем название апгрейда, его количество и силу.
public string upgradeName;
public float count;
public int clickPower;
currentCost = baseCost;
Каждый игровой цикл мы будем обновлять текст на кнопке, поэтому это пойдет в функцию Update()
На кнопке мы укажем в три строки:
Название апгрейда
Количество купленных апгрейдов
Мощность апгрейда
Делается это все одной командой. \n - переход с одной строки на другую.
upgradeInfo.text = upgradeName + "\nCost: " + currentCost + "\nPower: +" + clickPower;
Два плюса после power - это так и задумано. Тот что внутри кавычек будет отображаться на кнопке.
А происходит вот что. Для начала мы проверяем, достаточно ли у нас вообще денег? Если нет - ничего не происходит.
if (gm.gold >= currentCost)
Если денег достаточно, то мы вычитаем текущую цену апгрейда из наших денег:
gm.gold -= currentCost;
Теперь мы увеличиваем количество апгрейдов на единицу:
count += 1;
Теперь мы увеличиваем мощность нашего клика на величину clickPower
gm.goldPerClick += clickPower;
А теперь нам нужно придумать новую цену для апгрейда. На самом деле все уже придумано за нас и неплохо работает. А именно формула из Adventure Capitalist, да и в Kittens Game изначально используется такая. Мы берем магическое число 1.15 и возводим его в степень количества апгрейдов.
Если в wolfram alpha бахнуть вот это:
Plot[10 1.15^x, {x, 1, 20}]
То получим вот такой график, который показывает как меняется цена на первые 20 апгрейдов:
Но это так, для общего представления.
В общем формула норм, но она дает на выходе дробные значения, поэтому округлим ее до ближайшего целого. В итоге получается вот такая штука:
currentCost = Mathf.Round(baseCost * Mathf.Pow(1.15f, count));
Mathf.Round как раз округляет все что в скобках.
Mathf.Pow возводит первый аргумент - 1.15f, в степень второго аргумента - count. Буква f после 1.15 указывает что это число типа float.
В итоге получается вот такая функция:
В нем указываем что Gm - это наш объект GameManager, UpgradeInfo - это объект Text внутри кнопки.
Также указываем Базовую стоимость апгрейда - 10, его название - First Upgrade и мощность - 1. Количество апгрейдов оставляем на нуле. Получилось как-то так:
Теперь осталось для кнопки выбрать функцию, которая будет вызываться при нажатии события. Она у нас находится в скрипте GPCUpgrade, которая в свою очередь привязана к кнопке GPCUpgradeButton. А сам скрипт, как мы помним, называется GPCUpgradePurchased. В итоге выглядит это как-то так:
В иерархии дублируем нашу кнопку с апгрейдом:
В инспекторе у новой кнопки подстраиваем 3 важных параметра. Название, базовую цену и силу апгрейда.
Остальное подстраивать не надо, оно там само уже норм работает. И встроенный текст куда надо ссылается и гейм менеджер оно видит.
Получится примерно вот это:
GoldPerClickDisplay
Для начала добавим еще одно текстовое поле для отображения силы клика. Я просто дублирую GoldDisplay:Передвигаем его под первый дисплей и делаем шрифт обычным вместо жирного, потому что эта метрика несколько менее важная чем количество золота.
Теперь открываем GameManager скрипт.
Добавляем новую переменную для нашего дисплея.
public UnityEngine.UI.Text GoldPerClickDisplay;
В функцию Update прописываем обновление нашего нового дисплея, аналогично уже сделанному:
GoldPerClickDisplay.text = "GPC: " + goldPerClick;
В юнити добавляем скрипту GameManager наш дисплей.
В общем-то ничего сложного.
Еще заметил что стоит пофиксить 0 на 1 в дисплее на самой сцене, чтобы в глаза не бросалось.
Upgrade Button
Добавил новую кнопку. Назвал GPCUpgradeButton. Заодно переименовал старую в ClickMeButton.Воткнул кнопку в правый верхний угол. Сделал размеры 200х100. Шрифт увеличил до 20. Если не будет влезать - подправим.
GPCUpgrade скрипт
Создаем новый скрипт GPCUpgrade и открываем его.Он будет отвечать за вид кнопки апгрейда и за функцию покупки при нажатии на эту кнопку.
Переменные
Подключаем наш гейм менеджер, потому что там хранится количество денег и сила клика.
public GameManager gm;Подключаем текст написанный на кнопке, потому что именно туда мы будем выводить название, цену и мощность апгрейда.
public UnityEngine.UI.Text upgradeInfo;
Задаем базовую стоимость и текущую стоимость апгрейда. Текущую делаем приватной переменной, чтобы не маячила в юнити.
public float baseCost;
private float currentCost;
Задаем название апгрейда, его количество и силу.
public string upgradeName;
public float count;
public int clickPower;
Start & Update
При старте игры нам нужно установить текущую цену на апгрейд равную базовой. У нас еще пока нет апгрейдов, поэтому цена должна с чего-то начинаться. Для этого как раз подойдет функция Start()currentCost = baseCost;
Каждый игровой цикл мы будем обновлять текст на кнопке, поэтому это пойдет в функцию Update()
На кнопке мы укажем в три строки:
Название апгрейда
Количество купленных апгрейдов
Мощность апгрейда
Делается это все одной командой. \n - переход с одной строки на другую.
upgradeInfo.text = upgradeName + "\nCost: " + currentCost + "\nPower: +" + clickPower;
Два плюса после power - это так и задумано. Тот что внутри кавычек будет отображаться на кнопке.
GPCUpgradePurchased
Возможно название функции довольно стремное, но в целом должно быть понятным. В ней описывается что происходит при нажатии на кнопку покупки апгрейда на мощность клика.А происходит вот что. Для начала мы проверяем, достаточно ли у нас вообще денег? Если нет - ничего не происходит.
if (gm.gold >= currentCost)
Если денег достаточно, то мы вычитаем текущую цену апгрейда из наших денег:
gm.gold -= currentCost;
Теперь мы увеличиваем количество апгрейдов на единицу:
count += 1;
Теперь мы увеличиваем мощность нашего клика на величину clickPower
gm.goldPerClick += clickPower;
А теперь нам нужно придумать новую цену для апгрейда. На самом деле все уже придумано за нас и неплохо работает. А именно формула из Adventure Capitalist, да и в Kittens Game изначально используется такая. Мы берем магическое число 1.15 и возводим его в степень количества апгрейдов.
Если в wolfram alpha бахнуть вот это:
Plot[10 1.15^x, {x, 1, 20}]
То получим вот такой график, который показывает как меняется цена на первые 20 апгрейдов:
Но это так, для общего представления.
В общем формула норм, но она дает на выходе дробные значения, поэтому округлим ее до ближайшего целого. В итоге получается вот такая штука:
currentCost = Mathf.Round(baseCost * Mathf.Pow(1.15f, count));
Mathf.Round как раз округляет все что в скобках.
Mathf.Pow возводит первый аргумент - 1.15f, в степень второго аргумента - count. Буква f после 1.15 указывает что это число типа float.
В итоге получается вот такая функция:
Возвращаемся в юнити
Подключаем к нашей кнопке GPCUpgradeButton компонент GPCUpgrade скрипт.В нем указываем что Gm - это наш объект GameManager, UpgradeInfo - это объект Text внутри кнопки.
Также указываем Базовую стоимость апгрейда - 10, его название - First Upgrade и мощность - 1. Количество апгрейдов оставляем на нуле. Получилось как-то так:
Теперь осталось для кнопки выбрать функцию, которая будет вызываться при нажатии события. Она у нас находится в скрипте GPCUpgrade, которая в свою очередь привязана к кнопке GPCUpgradeButton. А сам скрипт, как мы помним, называется GPCUpgradePurchased. В итоге выглядит это как-то так:
Тестируем
Вроде все работает :)Нам нужно больше апгрейдов?
Ваще изи.В иерархии дублируем нашу кнопку с апгрейдом:
В инспекторе у новой кнопки подстраиваем 3 важных параметра. Название, базовую цену и силу апгрейда.
Остальное подстраивать не надо, оно там само уже норм работает. И встроенный текст куда надо ссылается и гейм менеджер оно видит.
Комментариев нет:
Отправить комментарий