Пятница, 29 Ноября 2024, 07:15

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
afqДата: Четверг, 05 Октября 2017, 20:46 | Сообщение # 821 | Тема: Прокачка персонажа / Повышение уровня
Разработчик
Сейчас нет на сайте
drcrack, не может быть.
Цитата

все активные корутины выполняются каждый кадр после всех Update

Откуда такая информация. Coroutine не начнётся выполнятся вновь, он один раз запускается, и только yield способен уступить поток. Я раньше читал про устройство ос и также помню, что в си можно написать для линукс pthread_yield, что значит, уступить другому потом выполнение. В программе, если несколько потоков, вот уже не помню точно, подзабыл, но вроде менеджер есть какой-то, который знает о потоках, которые есть в программе, и чтобы например не затрачивать время на один поток, когда в нем уже не нуждаются, делают yield. И тогда процессор другим занимается, если нужно.

А что если в update применяется процессор видеокарты, потому как покадровое обновление, а на coroutine применяется pc процессор.

Цитата

Оно будет работать, но станет намного медленнее чем было, потому что запуск корутины это более затратная операция чем просто цикл, и делать это 100 раз в секунду ради 1 итерации это как-то глупо.

Ну ты тоже, ты так специально написал чтоли? Давай тогда я напишу. Предлогать вычислять каждый кадр квадратный корень миллион раз, это точно глупо. Зато вычисления уже будут не в обновлении кадров, а в отдельном потоке.

Да и вообще хочешь сказать, что ты бы в кадре выполнял проверку на какое нибудь действие и использовал свойства, как в той книге советуют? А в coroutine ты что тогда бы выполнял?

Добавлено (05 октября 2017, 20:41)
---------------------------------------------
Цитата

Никаких потоков не создается, в моем варианте вообще 1 корутина для всего, это ты зачем-то запускаешь их каждый кадр

Цитата

хочешь сказать, что начал выполнятся coroutine, и он не успел выполнится, и начнется заного выполнятся?

ты чего drcrack, ты сам попросил вычислить каждый кадр милион раз

Добавлено (05 октября 2017, 20:46)
---------------------------------------------
drcrack, а точно, нашел инфу, где написано, что в основном потоке выполняется.

Сообщение отредактировал afq - Четверг, 05 Октября 2017, 20:42
afqДата: Четверг, 05 Октября 2017, 20:22 | Сообщение # 822 | Тема: Прокачка персонажа / Повышение уровня
Разработчик
Сейчас нет на сайте
вызвать coroutine не накладно, потому как возвращает мгновенно результат. А вот вичислять все конечно затормозит. 60 кадров в секунду, создастся отдельный поток, который будет миллион раз вычислять корень. 60 потоков в секунду. Ты сам знаешь, от чего тормозить будет.
afqДата: Четверг, 05 Октября 2017, 20:18 | Сообщение # 823 | Тема: Прокачка персонажа / Повышение уровня
Разработчик
Сейчас нет на сайте
ArtemS, классы будут прикреплены к объекту, если ты сделаешь префаб с классом.

Добавлено (05 октября 2017, 20:04)
---------------------------------------------
drcrack,
Код


IEnumerator w ()
{
  /* вычислить корень */
  yield return null;
}

void Update ()
{
  
    StartCoroutine ( w () );

}

Добавлено (05 октября 2017, 20:06)
---------------------------------------------
drcrack, это может повлиять на fps, если будут затрачиваться процесорное время на вычисление, когда нужно затрачивать на отрисовку.

Добавлено (05 октября 2017, 20:18)
---------------------------------------------
drcrack,

Цитата

Функция StartCoroutine всегда возвращает управление немедленно, однако вы можете получить результат.


Сообщение отредактировал afq - Четверг, 05 Октября 2017, 20:05
afqДата: Четверг, 05 Октября 2017, 18:45 | Сообщение # 824 | Тема: Прокачка персонажа / Повышение уровня
Разработчик
Сейчас нет на сайте
ArtemS, ты знаешь как с помощью кода создать много врагов и добавить к каждому EnemyHealth?

Сообщение отредактировал afq - Четверг, 05 Октября 2017, 18:45
afqДата: Четверг, 05 Октября 2017, 18:22 | Сообщение # 825 | Тема: Прокачка персонажа / Повышение уровня
Разработчик
Сейчас нет на сайте
ArtemS, попробуй поменять так.
Код

  public void Death()
    {

        Destroy(slider);              //убить слайдер        
        die = true;        //объект мертв
    }

А то мало ли.

Ты знаешь название твоего объекта, к которому прикреплен PlayerExp? Сделай у врага так как написано ниже. Думаю ту поймешь что я хочу сказать.
Код

GameObject player;
EnemyHealth eh;

void Start ( )
{
  player = GameObject.Find ( "название объекта, к которому прикреплен PlayerExp" );
  eh = player.GetComponent<PlayerExp>();

}
...
/* там, где враг умирает, напиши */
  eh.up_xp ( 10 );
...

А в коде PlayerExp
Код

public void up_xp ( int wow_xp )
{
  xp += wow_xp;
}

И все. Тогда.

Добавлено (05 октября 2017, 18:21)
---------------------------------------------
drcrack, но coroutine будет растягиваться на кадры, когда как в update придется в том же кадре ждать, пока выполнится все команды. А coroutine будет выполнятся, пока в update много обновлений уже пройдет. Как ты собираешься производить вычисления, если они не успевают за кадр выполниться?

Добавлено (05 октября 2017, 18:22)
---------------------------------------------
я там ошибку сделал и исправил, пересмотри еще раз текст.

Сообщение отредактировал afq - Четверг, 05 Октября 2017, 18:22
afqДата: Четверг, 05 Октября 2017, 14:37 | Сообщение # 826 | Тема: Warbanners
Разработчик
Сейчас нет на сайте
Vlad_Konung, игра бесплатная будет?
afqДата: Четверг, 05 Октября 2017, 09:57 | Сообщение # 827 | Тема: Прокачка персонажа / Повышение уровня
Разработчик
Сейчас нет на сайте
drcrack, я может потом посмотрю. А что, в update если этот цикл вставишь, не будет тормозить? Вот такой
Код


            for (var i = 0; i < 10000000; i++) {
                x = Mathf.Sqrt(x);
            }

        

А что если сделать так?
Код

  IEnumerator Slow() {

        var x = float.MaxValue;

        while (true) {

            for (var i = 0; i < 10000000; i++) {
                x = Mathf.Sqrt(x);
                yield return null;
            }

            yield return null;
        }

    }

Можешь проверить, будет лагать?


Сообщение отредактировал afq - Четверг, 05 Октября 2017, 09:59
afqДата: Четверг, 05 Октября 2017, 06:59 | Сообщение # 828 | Тема: Прокачка персонажа / Повышение уровня
Разработчик
Сейчас нет на сайте
drcrack, а где написано тогда, что в coroutine замедляет кадр, если к кадрам относится например update и т.д. Я помню, где-то в книге об этом читал.

Вот смотри.
click

Особенно строку прочти.
Цитата
. Корутины - прекрасное средство когда моделируется поведение, растянутое на несколько кадров.

Так что это выполняется не каждый кадр, а не зависимо от кадров.
afqДата: Среда, 04 Октября 2017, 21:53 | Сообщение # 829 | Тема: Прокачка персонажа / Повышение уровня
Разработчик
Сейчас нет на сайте
drcrack, так это что получается, EnemyHealt на gui рисуется, или что это за объект? Не пойму вообще. Ладно. Потом пойму.

Добавлено (04 октября 2017, 21:52)
---------------------------------------------
drcrack, так ты мне ссылку на классы дал. Я под объекты подразумевал только объекты unity3d.

Цитата
да, теперь вообще полная дичь)

смешно.

Цитата
в update они или где-то еще, тяжелые вычисления каждый кадр в любом случае будут просаживать фпс

Поэтому чтобы вычисления не производит в кадре, делают в IEnumerator coroutine, в такое случае уже не в кадре будут вычисляться, и не будет нагрузки на fps.

Добавлено (04 октября 2017, 21:53)
---------------------------------------------
drcrack, может тебе тоже стоит книжку почитать? Или ты считаешь себя умнее автора?


Сообщение отредактировал afq - Четверг, 05 Октября 2017, 07:20
afqДата: Среда, 04 Октября 2017, 21:09 | Сообщение # 830 | Тема: Прокачка персонажа / Повышение уровня
Разработчик
Сейчас нет на сайте
drcrack,
Цитата
кроме того, она никогда не завершится
.
Я не ошибся, она же даже не в while? Выполнится один раз и все.
Цитата

totalxp = enemy1.xp;

Да, не подумал. Бывает, и о чем я думал.
Цитата
если эта книжка и вдохновила тебя на эти корявые примеры, ее лучше не читать ))

Я ее когда читал, не все понимал, потому как и c# плохо знал и все еще наверное многого незнаю. Но там написано то, что если мне понадобиться, я знаю точно, что там есть это, и когда нужно будет, прочту может быть вновь. Это не тоже самое, что читать
комментарии. Там любое предложение что-то значит.

Цитата
Это свойство должно называться isDead

Почему так? Потому что логично?

Цитата
и то и другое — ссылки на обьекты

А что, EnemyHealth разве не класс? Я думал что это класс, который прикреплен к объекту.

А отредактировал то сообщение.

Вот он например в Update поставил debug.log, это тоже лучше в IEnumerator coroutine делать. В книге той, которую я приводил в пример советовалось не производить вычисления в update, в update например делать мелкие вычисления. Также не забывал о свойствах, которые выполняются как события если то или иное присвоено, такое тоже можно в update, все равно, уже не в update будет выполнятся.


Сообщение отредактировал afq - Четверг, 05 Октября 2017, 07:20
afqДата: Среда, 04 Октября 2017, 20:17 | Сообщение # 831 | Тема: Blender анимация не экспортируется кто поможет ?
Разработчик
Сейчас нет на сайте
Цитата
а ты в какой программе 3д анимацию делаешь ?

В blender. Она бесплатная. Тем более у меня линукс. Так что выбора особого нет ( какой программой пользоваться ).
Да, кстати, есть ещё проект, makehuman называется. Там можно людей создавать. Потом их экспортировать в формат mhx2, который, если я правильно помню нужно как плагин подключать. А в blender нужно добавить плагин makehuman, и тогда можно с костями импортировать людей из makehuman с костями, если в makehuman установишь кости. В blender потом анимируешь и всё.
afqДата: Среда, 04 Октября 2017, 19:47 | Сообщение # 832 | Тема: Blender анимация не экспортируется кто поможет ?
Разработчик
Сейчас нет на сайте
COOLGAMER, что такое fps creator увидел только щас в youtube. Тогда экспорт наверное нормально происходит. Тогда может в самом fpscreator дело?

Добавлено (04 октября 2017, 19:47)
---------------------------------------------
COOLGAMER,

Цитата
afq, есть то он есть но я открывал модель в программе Fragmotion и там ни костей ни анимации вот :'(

Не незнаю тогда. Такой тоже не пользовался, не подскажу.
afqДата: Среда, 04 Октября 2017, 19:41 | Сообщение # 833 | Тема: Blender анимация не экспортируется кто поможет ?
Разработчик
Сейчас нет на сайте
COOLGAMER, ага, вижу, есть экспорт костей. Export armature bones.
afqДата: Среда, 04 Октября 2017, 19:37 | Сообщение # 834 | Тема: Blender анимация не экспортируется кто поможет ?
Разработчик
Сейчас нет на сайте
COOLGAMER, что это за x формат? fbx, direct x?
afqДата: Среда, 04 Октября 2017, 19:24 | Сообщение # 835 | Тема: Прокачка персонажа / Повышение уровня
Разработчик
Сейчас нет на сайте
ArtemS, ты указал что будет класс
Код

    public EnemyHealth enemy1;

Я имел ввиду, что ты классу присвоишь null, когда нужно. Я наверное не то подумал. Ты же к объекту класс привязываешь. Тогда, прежде чем удалить объект, сделай то что нужно ( присвоение xp ), а потом удаляй объект.

У тебя enemy1 объект чтоли, раз ты хочешь компонент класса получить?

Я вообще не пойму как ты сделал, ты что, на том же объекте, который будет уничтожатся, решил присвоить xp, а кому?

Попробуй так.
Код

/* указатель на объект */
GameObject enemy;
/* указатель на класс */
EnemyHealth enemy1;

void Start ( )
{
  enemy = GameObject.Find ( "название объекта, который расположен в списке слева" );
  enemy1 = enemy.GetComponent<EnemyHealth>();
  ...
  /* создай отдельный поток, чтобы он проверялся не в кадре, а в потоке, так он не будет замедлять покадровое обновление */
StartCoroutine ( wa () );
}
IEnumerator wa ( )
{
  while ( true ) {
  /* здесь проверяй, умер ли объект */
  if ( enemy1.die == true ) {
    totalxp += enemy1.xp;
  /* после присвоения, удаляй объкт */
   DestroyObject ( enemy );
  /* если, проверить только один объект, то добавь break, иначе обходись без break и меняй так,
      чтобы разных можно было бы убить. Когда не нужно больше проверять, напиши
      StopCoroutine ( wa () );
  break;
  }
  yield return null;
  }
}

Значит в классе, в том, который к объекту приклеплен, устанавливаешь public bool die в true, когда нужно и всё.

Надеюсь это поможет.

Ещё предлагаю почитать книгу "Искусство создания сценариев в Unity", вдруг пригодится.

Добавлено (04 октября 2017, 19:23)
---------------------------------------------
Я отредактировал сообщение, добавил
Код

   DestroyObject ( enemy );


Добавлено (04 октября 2017, 19:23)
---------------------------------------------
Это было сделано с учётом одного врага, чтобы было легче увидеть все.

Добавлено (04 октября 2017, 19:24)
---------------------------------------------
еще добавил в StartCoroutine. ( забыл )
Код

  yield return null;


Сообщение отредактировал afq - Четверг, 05 Октября 2017, 07:19
afqДата: Среда, 04 Октября 2017, 19:01 | Сообщение # 836 | Тема: Blender анимация не экспортируется кто поможет ?
Разработчик
Сейчас нет на сайте
COOLGAMER, в какой формат экспортируешь? Смотришь слева опции при экспорте?
afqДата: Среда, 04 Октября 2017, 18:32 | Сообщение # 837 | Тема: Определить ориентацию Android-устройства
Разработчик
Сейчас нет на сайте
mraklbrw, вот так.
Код

ScreenOrientation w = Screen.orientation;

  switch (w) {
   case ScreenOrientation.Portrait:
    Debug.Log("!!!");
    break;
  }
  Debug.Log(w.ToString());
afqДата: Среда, 04 Октября 2017, 13:58 | Сообщение # 838 | Тема: Прокачка персонажа / Повышение уровня
Разработчик
Сейчас нет на сайте
HerrPotapov,
Цитата
а в следующей же строке пытаемся вызвать метод на enemy (который вообще-то null)

Да точно. xp так не начислится.
ArtemS, сделай в текущем классе функция начисления xp, а enemy1 дай ссылку на твой класс, и когда enemy1 будет уничтожатся, пусть он вызовет функция начисления xp.
afqДата: Вторник, 03 Октября 2017, 19:47 | Сообщение # 839 | Тема: Проблема с ригом.
Разработчик
Сейчас нет на сайте
barmalei195, дай ссылку на уроки.
afqДата: Вторник, 03 Октября 2017, 19:46 | Сообщение # 840 | Тема: На Android не работают триггеры
Разработчик
Сейчас нет на сайте
mraklbrw, а всегда два триггера выполняются? Не может быть такого, что один выполнился, а другой не успел обработать проверку на вхождение в триггер? Может на android выполняется другой триггер, не тот, который должен.
Поиск:

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