Вторник, 25 Января 2022, 05:33

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 45
  • 1
  • 2
  • 3
  • 44
  • 45
  • »
Форум игроделов » Записи участника » alexsilent [890]
Результаты поиска
alexsilentДата: Четверг, 20 Января 2022, 16:58 | Сообщение # 1 | Тема: С какой периодичностью работает OnMouseOver()?
почти ветеран
Сейчас нет на сайте
drcrack, спасибо!
alexsilentДата: Четверг, 20 Января 2022, 12:48 | Сообщение # 2 | Тема: С какой периодичностью работает OnMouseOver()?
почти ветеран
Сейчас нет на сайте
С какой периодичностью работает функция OnMouseOver()?
(при условии, что в данный момент мышка направлена на коллайдер объекта)

Всегда ли OnMouseOver точно чередуется с Update?
Бывают ли такие ситуации, когда может быть 2 обновления Update, до того как сработает OnMouseOver?
Просто мне очень важно чтобы Update и OnMouseOver работали как часы и менялись точно друг за другом,
но вот не уверен, будет ли так работать на всех компах с любой скоростью и любой сложности лагов, хоть до 1 FPS
или наоборот когда игра идёт с 1000 FPS.

PS На моём компе всё норм, но это не показатель. У меня он ниже среднего.


Сообщение отредактировал alexsilent - Четверг, 20 Января 2022, 12:52
alexsilentДата: Воскресенье, 26 Декабря 2021, 08:32 | Сообщение # 3 | Тема: Как дела в новой юнити?
почти ветеран
Сейчас нет на сайте
GWÁLÐ, Спасибо!

Цитата GWÁLÐ ()
Посмотри про URP, наиболее перспективный рендеринг для быстрой инди разработки, как мне показалось.

По URP я не уверен, ибо не планирую в 3D (я так понял это только для 3D?!)


Сообщение отредактировал alexsilent - Воскресенье, 26 Декабря 2021, 08:34
alexsilentДата: Понедельник, 25 Октября 2021, 10:21 | Сообщение # 4 | Тема: Динамическое чтение строк кода в C#? Возможно ли?
почти ветеран
Сейчас нет на сайте
Цитата drcrack ()
(в общем случае также интерфейсами, но не в юнити)


А что не так с интерфейсами в юнити?


Сообщение отредактировал alexsilent - Среда, 27 Октября 2021, 01:07
alexsilentДата: Понедельник, 11 Октября 2021, 07:50 | Сообщение # 5 | Тема: Динамическое чтение строк кода в C#? Возможно ли?
почти ветеран
Сейчас нет на сайте
Цитата drcrack ()
ну если для тебя даже свитчи это вариант, то и делегаты подойдут наверно


То есть делегаты хуже свитчей?)
alexsilentДата: Воскресенье, 10 Октября 2021, 17:15 | Сообщение # 6 | Тема: Динамическое чтение строк кода в C#? Возможно ли?
почти ветеран
Сейчас нет на сайте
Цитата drcrack ()
а ты попробуй


А делегаты это не вариант? Как мне в первом варианте предложил masb8ly-GC!
PS Ну то есть быстрая ли эта опция с делегатами и нет ли там других подводных камней?
Просто кажется, насколько я нагуглил тему,
с делегатами можно на ходу менять текущую функцию ИИ, если оно конечно нормально работает.
Хз... надо попробовать оба вариант потестировать на креш-тест.


Сообщение отредактировал alexsilent - Воскресенье, 10 Октября 2021, 17:17
alexsilentДата: Воскресенье, 10 Октября 2021, 08:03 | Сообщение # 7 | Тема: Динамическое чтение строк кода в C#? Возможно ли?
почти ветеран
Сейчас нет на сайте
Цитата drcrack ()
ну так сделай скрипт class AI: MonoBehaviour и в него добавь нужные виртуальные методы, далее от этого скрипта наследуй конкретные реализации типа class CreatureAI: AI в которых определяй нужное поведение, тогда сможешь делать то, что пытался сделать, просто вместо Component пишешь AI

Как вариант, тоже думал над таким. Но только потом вроде нельзя перенаследовать, и поменять скрипт с CreatureAI,
на MountAI (если это животное можно было бы оседлать)

Цитата drcrack ()
2) на юнити сделаны сотни и тысячи пиксель арт игр, и как-то все работает на обычных аниматорах, без свитчей на пять экранов. почему твоя игра так не может?

Возможно потому-что у обычных игр не так много частей тела у спрайта, просто мне это нужно для кастомизации,
потому многие куски тел разделены:

Обычно у классических игр, просто 1 часть тела на персонажа, ну или может 2-3 куска тела (Body, Weapon, Shield).
А у меня в финальной версии должно быть около 20-30 (хотя сейчас их пока 10, там ещё должны быть слои одежды),
и спрайты должны синхронно менять своё содержание и положение (округляя позицию до сотых долей, а то иначе пиксельарт "поплывёт", например сам аниматор не может округлять позицию, поэтому всё равно придётся корректировать это программно), возможно есть плагины для анимации пиксельарта, но скорее всего они платные, так что приходится делать такой громоздкий код.


Сообщение отредактировал alexsilent - Воскресенье, 10 Октября 2021, 08:04
alexsilentДата: Воскресенье, 10 Октября 2021, 00:25 | Сообщение # 8 | Тема: Динамическое чтение строк кода в C#? Возможно ли?
почти ветеран
Сейчас нет на сайте
Цитата drcrack ()
но вообще сама постановка задачи уже звучит так, как будто ты делаешь что-то не то


Ну вот несколько задач:

1) мне нужно добавить разный AI для разных NPC, я просто делаю разные скрипты, а иногда эти скрипты хотелось бы переключать, то есть из одного ИИ переключиться на другой ИИ. По мне кажется идеальнее вариант был бы как в Lua:
Код
//для обычных монстров
MyAI = WalkingAI(); // если бы можно к переменной просто функцию присобачить, было бы удобно
//а для летающих тут подставить
MyAI = FlyingAI(); // но подобные строки не работают
//а это например, когда враг стал бешенным
MyAI = AngryAI();
// а вот например 2 состояния лошади, когда герой сел на неё, и когда лошадь стоит без хозяина
MyAI = CreatureAI(); // без хозяина
MyAI = PlayerMountAI(); // управляется героем


2) мне нужно сделать свой встроенный Пиксельарт Аниматор, и в этом аниматоре сделать "вермишелевый" код,
просто написав кодом, это самый быстрый способ, чем придумать способ, чтобы эти формулы считывались как-то иначе.
И мне нужно написать для каждого персонажа свой "вермишелевый" код, у людей одна анимация, у лошадей другая,
у врагов особого вида третья и т.д., получается я могу этот Switch просто сделать неимоверно большим,
или разбить на разные скрипты, чтобы на каждое существо был свой код:
Код

void AnimWork() {
    Timer += Time.deltaTime;
    float t = Timer; //Time.time;
    switch(MyMode) { // Body Animation
  case "attack": // attack animation
   aBody.Anim(Mod(t,2)+3);
   aHead.Anim(0);
   aHandA.Anim(5);
    aHandB.Anim(5);
    
    t *= 9f;
    aSkirt.Anim(4-Mod(t,2));
    aEarA.Anim(Pong(t+.9f,3));
    aEarB.Anim(Pong(t+.8f,3));
    aHairA.Anim(Pong(t*2,4));
    aHairB.Anim(Mod(t+.25f,5));
    aTail.Anim(Pong(t,3));
    aRibbon.Anim(Pong(t,3));
    
    aTool.Anim(0,.2f,.07f,-95);
    break;
   case "idle": // idle animation
    aBody.Anim(Mod(t,2)+3);
    aHead.Anim(0);
    aHandA.Anim(5);
    aHandB.Anim(5);
    
    t *= 9f;
    aSkirt.Anim(4-Mod(t,2));
    aEarA.Anim(Pong(t+.9f,3));
    aEarB.Anim(Pong(t+.8f,3));
    aHairA.Anim(Pong(t*2,4));
    aHairB.Anim(Mod(t+.25f,5));
    aTail.Anim(Pong(t,3));
    aRibbon.Anim(Pong(t,3));
    
    aTool.Anim(0,.07f,.24f,85);
    break;
    }
}


Добавлено (10 Октября 2021, 00:29)
---------------------------------------------
Просто юнити аниматор не может в резкие изменения данных спрайтов, он делает плавно,
например голова повернулась, а спрайт ещё не изменил свой кадр.
Бывает ещё прикол когда нужно чтобы один спрайт спрятался, а другой рядом включился
и опять же аниматор бывает делает так, что либо оба спрятались, либо оба появились, и это портит картинку
точного пиксельарта. Другими словами лучше для анимации пиксельарта юзать что-то другое, а не аниматор,
ну я выбрал простой вариант, просто кодом.

А частей тела много, потому-что я планирую кастомизацию.

Добавлено (10 Октября 2021, 00:36)
---------------------------------------------
Например я тут тестировал анимацию на множество частей тела. Правда это Tic-80, а не Unity.
https://tic80.com/play?cart=1859
Ну и в саму юнити уже добавил эту систему, правда не хватает чего-то, чтобы можно было на каждого персонажа
свою группу функций анимации накинуть, у лошадей своя, а у людей своя, а у гоблинов тоже своя.
https://twitter.com/nyanarium/status/1430494168397275136

Добавлено (10 Октября 2021, 00:50)
---------------------------------------------
Я вначале хотел для анимации сделать таблицу, но сделав систему считывания символов из такой таблицы
и превращение символов в формулу уже будет тратиться время, а эта операция должна проходить по 60 раз в секунду
ещё и на 100-200 неписей, и самый быстрый способ реализации и работы, конечно же сделать просто кодом.
И неплохо бы придумать динамическое перемещение в нужную часть кода, а иначе этот вермишелевый код будет очень большим, просто если не придумаю динамическую функцию, то получается всю вермишель для всех анимаций, всех персонажей придётся добавить в один огромный код через Switch, и это будет кошмарнее выглядеть, чем на данный момент,
ибо пока у меня всего несколько анимаций для одного персонажа.


Сообщение отредактировал alexsilent - Воскресенье, 10 Октября 2021, 00:59
alexsilentДата: Суббота, 09 Октября 2021, 13:17 | Сообщение # 9 | Тема: Динамическое чтение строк кода в C#? Возможно ли?
почти ветеран
Сейчас нет на сайте
Цитата drcrack ()
Потому что вместо Component надо указать реальный тип твоего компонента:


А как? Если сделать вместо компонента, чёткое имя скрипта, то тогда это не имеет смысла, потому-что я хотел бы разные туда скрипты подставлять, то есть мне нужен динамический метод доступа к некоторым строкам кода.

А в таком виде компоненту вроде не нужно указывать ничего:
Код
Component[] trs = transform.GetComponentsInChildren<Transform>();
foreach (Transform tr in trs) {
    tr.gameObject.layer = 1;
}


Сообщение отредактировал alexsilent - Суббота, 09 Октября 2021, 13:19
alexsilentДата: Пятница, 08 Октября 2021, 13:52 | Сообщение # 10 | Тема: Динамическое чтение строк кода в C#? Возможно ли?
почти ветеран
Сейчас нет на сайте
Цитата masb8ly-GC ()
Почитайте про делегаты и их виды и все встанет на свои места. Ну и про то как работать с Dictionary, само собой.


Спасибо! С Dictionary знаком и работаю, но вот про тип <string, Action> - Action , первый раз слышу,
погуглю также и про делегаты, что-то знакомое, но забыл.
alexsilentДата: Пятница, 08 Октября 2021, 09:11 | Сообщение # 11 | Тема: Динамическое чтение строк кода в C#? Возможно ли?
почти ветеран
Сейчас нет на сайте
Пытаюсь придумать какой-то динамический способ изменения чтения строк кода или динамическую функцию.

1) Насколько я знаю в C# невозможно сделать как в Basic, оператор Goto?! То есть переметнуться на определённую строку,
чтобы начать читать сразу оттуда?!

2) В Lua и GML можно задать любой переменной сразу функцию. Которая будет работать вызывая эту переменную,
и если надо будет, можно было бы поменять в переменной функцию, очень удобная штука. Опять же C# и этого вроде как не умеет.

3) Также я попытался к типу Component прикрепить любой скрипт, и тут хз, можно ли сделать что-то, ибо у меня не получилось:

Код
public class CompRun : MonoBehaviour {
    public Component test;
    
    void Start () {
  test = Game.it.gameObject.GetComponent<MyScript>(); // получил MyScript скрипт с GameObject
  print("test: "+test); // Тут строка работает и показывает, что с test переменной всё норм
  test.RunFunction(); // А эта строка не хочет вызывать функцию с кастомного компонента
    }
}


Выходит, что только можно сделать огромный список Switch и напихать все функции в такой идиотский список?
Код
public string MyScript
switch (MySciprt) {
case "script1": Script1();break;
case "script2": Script2();break;
case "script3": Script3();break;
}

А ещё есть динамический вызов функции SendMessage, но он слишком медленный для тех вещей, что мне нужно,
примерно 60 раз в секунду вызывать до 100-200 NPC в сцене.


Сообщение отредактировал alexsilent - Пятница, 08 Октября 2021, 09:11
alexsilentДата: Понедельник, 27 Сентября 2021, 17:03 | Сообщение # 12 | Тема: Как работает SceneManager.sceneLoaded логика?
почти ветеран
Сейчас нет на сайте
Цитата drcrack ()
списка обработчиков

хотя может быть я не шарю что такое обработчик, надо реально проверить убрать из OnEnable и потестировать только с Awake


Сообщение отредактировал alexsilent - Понедельник, 27 Сентября 2021, 17:24
alexsilentДата: Понедельник, 27 Сентября 2021, 13:31 | Сообщение # 13 | Тема: Как работает SceneManager.sceneLoaded логика?
почти ветеран
Сейчас нет на сайте
В документации чтобы заработал OnSceneLoaded есть пример с OnEnable и OnDisable,
и непонятной строкой:
Код
SceneManager.sceneLoaded += OnSceneLoaded;


А что если у меня этот скрипт с DontDestroyOnLoad, то получается OnDisable не будет работать,
пока из игры не выйдешь?!
1) А не будет ли ничего страшного, если не будет использоваться эта строка после перезагрузки уровня?
Код
SceneManager.sceneLoaded -= OnSceneLoaded;

И что вообще эта строка делает? Не будет ли какой-то утечки без неё? Зачем там минус?!

2) Можно ли вообще убрать функцию OnDisable ?

И вот мой код скрипта:

Код

    void Awake() {
  DontDestroyOnLoad(gameObject);
    }
    void OnEnable()
    {
        SceneManager.sceneLoaded += OnSceneLoaded;
    }
    void OnDisable()
    {
        SceneManager.sceneLoaded -= OnSceneLoaded;
    }
    
     void OnSceneLoaded(Scene scene, LoadSceneMode mode) {
    OnLevelLoaded();
     }


Сообщение отредактировал alexsilent - Понедельник, 27 Сентября 2021, 13:38
alexsilentДата: Суббота, 25 Сентября 2021, 09:15 | Сообщение # 14 | Тема: Как в иерархии скриптов не дублировать родителя?
почти ветеран
Сейчас нет на сайте
manonedge, Robinzon787, Спасибо!

>>подумай, какая вообще у тебя цель — сделать игру, или чтобы инспектор выглядел красиво?..
drcrack, Тоже верно, просто ещё раздражает такая вещь как получение доступа к скрипту, через
GetComponent всегда на старте скриптов, получается паутина доступа к компонентам,
и таких скриптов, которым нужно получить доступ становится всё больше
с увеличением кода, а так с такой фишкой, компонент уже внутри без лишних строк кода:
Код
public class Exit : Interactive {...}


Сообщение отредактировал alexsilent - Суббота, 25 Сентября 2021, 09:17
alexsilentДата: Пятница, 24 Сентября 2021, 16:44 | Сообщение # 15 | Тема: Как в иерархии скриптов не дублировать родителя?
почти ветеран
Сейчас нет на сайте
Цитата Robinzon787 ()
Попробуй объяснить большим количеством кода. Что значит


Окей!
Допустим у меня есть скрипты:
1) Exit - это различные двери и выходы на другие уровни
Код
[code]using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Exit : Interactive {
   // здесь просто инициализация обычных переменных и функции, но их слишком много, и не в них дело
}


2) Character - это персонажи с которыми можно поговорить

Код
[code]using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Character : Interactive {
   // здесь просто инициализация обычных переменных и функции, но их слишком много, и не в них дело
}


И мне нужно в обоих скриптах использовать эти объекты, то есть при наведения курсора объект подсвечивался,
а при нажатии активировался бы.
Поэтому добавил третий скрипт, хотя раньше бы я просто каждому скрипту одинаковые строки бы повесил.


3) Interactive - этот скрипт для того чтобы объект подсвечивался при наведении, а при нажатии активировался.

Код
[code]using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Interactive : MonoBehaviour {
   // здесь просто инициализация обычных переменных и функции, но их слишком много, и не в них дело
}


Скрипты очень большие, не уверен что они сюда поместятся, но в этом не суть.
Суть в том, что если на объект повесить сразу и Exit и Character, то на объекте будет 2 скрипта Interactive,
и у каждого свои настройки переменных, а хотелось бы чтобы скрипт Interactive не дублировался.

Добавлено (24 Сентября 2021, 16:48)
---------------------------------------------
PS Конечно, есть просто вариант вешать на все объекты дополнительнй скрипт Interactive,
а у тех скриптов убрать родителя:
Код
public class Exit : MonoBehaviour { // убрал иерархию
//...
}


Код
public class Character : MonoBehaviour { // убрал иерархию
//...
}


Но тогда придётся руками добавлять Interactive, а так он автоматически бы встроился.

Добавлено (24 Сентября 2021, 17:01)
---------------------------------------------
Вообще бесят эти отдельные скрипты, из-за этого у меня на каждом объекте висит тонна отдельных скриптов,
и не дай бог забыл какой-то скрипт повесить,в идеале хотелось бы чтобы на 1 объект - был 1 скрипт, но это нереально.
А не вот эта лента тонны скриптов:


Так бы хоть убрал Interactive как отдельный скрипт, немного бы пространство почистилось в инспекторе.



Сообщение отредактировал alexsilent - Пятница, 24 Сентября 2021, 17:08
alexsilentДата: Пятница, 24 Сентября 2021, 15:44 | Сообщение # 16 | Тема: Как в иерархии скриптов не дублировать родителя?
почти ветеран
Сейчас нет на сайте
Я совсем не разбираюсь в понятиях программирования, просто 10 лет программирую по методу тыка,
"эту штуку сюда, а этот прибамбас туда" даже не знаю как по научном спросить,
а то может быть и справшивать бы не пришлось, хватило бы гугла.

В общем, я недавно попробовал иерархию проводить у скриптов подсмотрев в Game Maker 2,
и это работает и тут, только вот непонятно, как сделать так чтобы родительский скрипт не дублировался:
Код

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

public class Exit : Interactive {
...
}


то есть тут вместо обычного MonoBehaviour я поставил Interactive (название родительского скрипта),
но когда попробовал сделать родителя ещё одному скрипту и эти два скрипта повесил на объект, то у объекта
получилось 2 Interactive и каждый со своими параметрами, так что пока пришлось отказаться от идеи повсеместно использовать такую фичу.
alexsilentДата: Четверг, 02 Сентября 2021, 08:06 | Сообщение # 17 | Тема: Как дела в новой юнити?
почти ветеран
Сейчас нет на сайте
Цитата drcrack ()
но каждая следующая версия тормозит больше предыдущей

лол xD шикарно!

Добавлено (02 Сентября 2021, 10:56)
---------------------------------------------
А я думал юнити всё лучше и быстрее с новой частью.

А в новых частях хоть запилили кнопку массового отключения модулей в Package Manager в юнити или всё также как и раньше надо по одному нажимать и долго ждать когда эти ч*ртовые модули отключатся, ибо их в самом начале навязал юнити даже без выбора их отключить при создании пустого проекта?!


Сообщение отредактировал alexsilent - Четверг, 02 Сентября 2021, 10:57
alexsilentДата: Среда, 01 Сентября 2021, 14:45 | Сообщение # 18 | Тема: Как дела в новой юнити?
почти ветеран
Сейчас нет на сайте
До сих пор пользуюсь юнити 2018.2.21, ибо не было особой нужды переходить на новую версию.
Но как дела в новых юнити версиях?
1) Появился ли там 2d navigation? (я имею ввиду свой родной, а не посторонний плагин, да и ещё за деньги)
2) Можно ли в новых юнити у спрайтов менять границы спрайта при редактировании, при этом чтобы ось оставалась на месте?
ну например это нужно для кастомизации одежды или тела, допустим я хочу чтобы ось руки оставалась на том же месте,
но другая рука немного толще, поэтому я хотел бы границы спрайта увеличить, но так чтобы ось оставалась там же где и была не смещаясь, а то в 2018-й версии ось смещается.
alexsilentДата: Вторник, 16 Марта 2021, 10:39 | Сообщение # 19 | Тема: CustomRange в SpriteMask и аналог оператора в Lua
почти ветеран
Сейчас нет на сайте
killing002, спасибо по первому вопросу, а я думал это только проверка)

А по второму вопросу, жаль что нет такой опции делении с ceil, мне наоборот нужно превратить в целое число:
Код
a = b // c; // в Tic-80 записывается
a = Mathf.CeilToRound(b / c); // в Unity это намного длинее кодом записывается

HandL.AnimIt(5+(Time.time%40//10)); // В итоге и так не самую простую линию нужно усложнять из этого варианта
HandL.AnimIt(5+(Mathf.FloorToCeil(Time.time%40/10))); // ...В этот вариант


Не люблю слишком длинные строки, ну да ладно, пора бы уже привыкнуть к этому аду из символов в Юнити за 10 лет.


Сообщение отредактировал alexsilent - Вторник, 16 Марта 2021, 10:41
alexsilentДата: Воскресенье, 14 Марта 2021, 05:09 | Сообщение # 20 | Тема: Автоматическая инициализация спрайтов в Unity
почти ветеран
Сейчас нет на сайте
При загрузке набора спрайтов, и нарезании картинки на спрайты, мы всё ещё не можем получить доступ к этим спрайтам,
пока не объявим какой-нибудь переменной, чтобы пользоваться самим спрайтом:
Код
public Sprite[] mySprite; // например объявить через массив

Но объявляя так вручную спрайты, перенося спрайты из ассетов в переменную массива mySprite,
я могу случайно ошибиться, если спрайтов очень много и их нужно в строжайшем порядке раскидывать.

Можно ли как-то автоматически спрайты закреплять в массив, чтобы уже можно пользоваться этими спрайтами в коде?
Ибо вручную это слишком долго и могут быть ошибки, я собираюсь добавлять до 23 наборов спрайтов на одну кастомизацию, а кастомизаций будет очень много. Где-то в среднем спрайтов будет около 1000-2000 штук, и они ещё должны быть в конкретном порядке стоять, чтобы случайно что-то не перепутать.

Другими словами мне нужно автоматически кодом перенести из группы спрайтов в массив переменной, чтобы получить доступ к самим спрайтам, а не вручную через Drag n Drop.

PS В Game Maker Studio например доступ к спрайту получаем сразу и легко, и не нужно проводить эту операцию
присваивания спрайтов к переменным, там это всё автоматически происходит.
Например загрузив набор спрайтов s_MySprite, то мы сразу в коде можем вызвать эти спрайты:
Код
draw_sprite(s_MySprite,5,x,y); // где нам нужен был пятый спрайт из массива спрайтов s_MySprite


Вроде бы Юнити должен быть проще в автоматизации, но пока-что я не знаю как это сделать.
Форум игроделов » Записи участника » alexsilent [890]
  • Страница 1 из 45
  • 1
  • 2
  • 3
  • 44
  • 45
  • »
Поиск:

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