Пятница, 29 Марта 2024, 01:12

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Убывание значения по секундам. (По непонятным причинам скрипт то работает то нет! С#)
Убывание значения по секундам.
Drag0nДата: Воскресенье, 31 Июля 2016, 16:55 | Сообщение # 1
был не раз
Сейчас нет на сайте
Доброго времени суток. Только пробую себя в програмирование, да и юнити тыкаю только 4 день. Естественно все по видео урокам. В 1 из уроков столкнуться с темой -здоровье, сила, голод. Посмотрев урок я повторил результат. Ну в прицепе все работает, но мне нужен еще и уровень воды. По этому немного помудрив с кодом я получил то что имею на руках (СМ ниже). Изначально план такой, я каждую секунду отнимаю одну секунду от значения в секундах 7 дней еда и 3 дня вода. И в основном вода отсчитывается корректно, а еда делает пол цикла и весит. С более мелкими цифрами работает ИНОГДА. Почему себя так ведет скрипт? Где ошибка? crazy

Код

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

public class NewBehaviourScript6 : MonoBehaviour {
    public float maxZ = 100f;
    public float maxB = 100f;
    public float maxG = 604800f;
    public float maxW = 259200f;
    private float Timer;
    public Slider sliderZdorove;
    public Slider sliderBeg;
    public Slider sliderGolod;
    public Slider sliderWoda;

    void Start () {
  sliderZdorove.maxValue = maxZ;
  sliderBeg.maxValue = maxB;
  sliderGolod.maxValue = maxG;
  sliderWoda.maxValue = maxW;
    }
  
    void Update () {

  Timer = 1f * Time.deltaTime;

  //здоровье
  if (Input.GetKey (KeyCode.LeftShift))
  {
   maxZ = maxZ - 1f * Time.deltaTime;
   sliderZdorove.value = maxZ;
  }

  //бег
  if (Input.GetKey (KeyCode.LeftControl))
  {
   maxB = maxB - 1f * Time.deltaTime;
   sliderBeg.value = maxB;
  }
  else //восстановление бега
   if (maxB <= 99.9f)
   {
    maxB = maxB + 1f * Time.deltaTime;
    sliderBeg.value = maxB;
   }

  // голод
  if (maxG >= 0f)
  {
   maxG = maxG - Timer;
   sliderGolod.value = maxG;
  }

  //пить
  if (maxW >= 0f)
  {
   maxW = maxW - Timer;
   sliderWoda.value = maxW;
  }
    }
}
TymonrДата: Воскресенье, 31 Июля 2016, 18:20 | Сообщение # 2
With OpenSource forever
Сейчас нет на сайте
Цитата Drag0n ()
 Timer = 1f * Time.deltaTime;

Умножать числа на 1 - мощь!
Цитата Drag0n ()
 public Slider sliderBeg;

Транслит - тоже круто. А зачем они публичные?

В чем проблема - хз, лень разбираться, но тут кода немного, перепиши с 0ля все, найдется проблема по ходу дела


Если вы решили обратиться к нам за помощью, не становитесь в позицию неудачника. И не ведите себя как неудачник. Лучший способ получить быстрый и чуткий ответ, - спрашивать как победитель — спрашивать как человек умный, уверенный в себе и знающий, которому просто понадобилась помощь при решении одной конкретной проблемы.
Как правильно задавать вопросы в технических форумах
Drag0nДата: Воскресенье, 31 Июля 2016, 18:24 | Сообщение # 3
был не раз
Сейчас нет на сайте
Цитата Tymonr ()
А зачем они публичные?

А х... его знает по уроку так :) Причем туда вставляется потом слайдер и он отображает.
LertmindДата: Воскресенье, 31 Июля 2016, 18:33 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
Drag0n, прочитай float, у него точность около 7 десятичных знаков, когда отнимаешь ничего не меняется:
Код
using System.IO;
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("{0:R}", 604800f - 0.016666f); // float, вывод: 604800
        Console.WriteLine("{0:R}", 604800.0 - 0.016666); // double, вывод: 604799.983334
    }
}

Храни в double, а когда надо вывести приводи к float, то есть:
public double maxG = 604800;
...
sliderGolod.value = (float) maxG;

Добавлено (31 июля 2016, 18:33)
---------------------------------------------
Можешь ещё просто использовать структуру DateTime, сможешь легко отсчитывать дни, недели и т. п.


Сообщение отредактировал Lertmind - Воскресенье, 31 Июля 2016, 18:34
Drag0nДата: Воскресенье, 31 Июля 2016, 18:34 | Сообщение # 5
был не раз
Сейчас нет на сайте
Цитата Lertmind ()
Храни в double, а когда надо вывести приводи к float, то есть:
public double maxG = 604800f;
...
sliderGolod.value = (float) maxG;


Спасибо Помогло! заработало :D Я бы фиг догадался бы на данной стадии знакомства с unity....


Сообщение отредактировал Drag0n - Воскресенье, 31 Июля 2016, 18:35
LertmindДата: Воскресенье, 31 Июля 2016, 18:36 | Сообщение # 6
заслуженный участник
Сейчас нет на сайте
Цитата Drag0n ()
Я бы фиг догадался бы на данной стадии знакомства с unity....
Это не Unity, это вообще о представлении чисел с плавающей точкой в компьютерах.
Drag0nДата: Воскресенье, 31 Июля 2016, 18:40 | Сообщение # 7
был не раз
Сейчас нет на сайте
Цитата Lertmind ()
это вообще о представлении чисел с плавающей точкой в компьютерах.

И с программированием вот только знакомлюсь. Для меня это цифры - а для языка обязательные условия при которых работает или нет. Я то кроме html и css пока не чего не знаю :) да и это тоже не программирование.
OrdanДата: Понедельник, 01 Августа 2016, 02:55 | Сообщение # 8
Главный зомби
Сейчас нет на сайте
Drag0n, я вообще стараюсь округлять все флоаты, или же отрубать хвосты, а то знаю я этих паршивцев.

Цитата недели: Из-за леса, из-за гор, кишки, месиво, хардкор. (Берсерк ТВ-2)

Мои проекты ТЫК
Мои видяхи на ютубэ ТЫК

Если ты споришь с идиотом, вероятно тоже самое делает и он.
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Убывание значения по секундам. (По непонятным причинам скрипт то работает то нет! С#)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг