Результаты поиска
| |
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. ( забыл )
Сообщение отредактировал 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 выполняется другой триггер, не тот, который должен.
|
|
| |
|