Четверг, 28 Марта 2024, 23:57

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Переход с UnityScript на Csharp для не программиста
Переход с UnityScript на Csharp для не программиста
pixeyeДата: Суббота, 05 Октября 2019, 10:15 | Сообщение # 21
Red Winter Software
Сейчас нет на сайте
Цитата alexsilent ()
А тут я просто не понимаю, например что за HandleUpdate


Ну у меня состояния делятся на три этапа - апдейт текущего, выход из текущего и заход на текущий. Это как OnEnable,OnDisable,Update для стейта.
Это не суть важно потому что это внутреигровая логика и тебе необязательно ее понимать) Вот тот же код просто по фреймворку без игровой логики

Код

// создаем процессор с группой сущностей у которых должен быть компонент ComponentFSM
sealed class ProcessorFSM : Processor<ComponentFSM>, ITick
{
  // вместо апдейтов свой тик с уже вложенной дельтой
  public void Tick(float delta)
  {
   // source - это название группы если создаешь процессор таким образом
   // там есть свой итератор и ты можешь легко прогнать всех активных сущностей группы
   foreach (ent entity in source)
   {
   // достаем компонент из сущности.
    var     cFSM      = entity.ComponentFSM();
   }
  }
}



Такие "стейты" как ты показал я конечно тоже делаю но это вообще не относится к работе фреймворка) просто код)

Код
    public static void OnLayer(ent entity, int layer)
   {
    var cObject = entity.ComponentObject();
    var cRender = entity.СomponentRender();
    var source  = cRender.source;

    switch (layer)
    {
     case States.LayerPawns.Monster:
      source.sortingOrder   = 1;
      source.sortingLayerID = sortingIdUnit;
      cObject.position.y    = -0.62f;
      cObject.position.z    = 0.1f;
      source.color          = colorPawnMonster;

      break;

     case States.LayerPawns.IdleCivil:
      source.sortingOrder   = -5;
      source.sortingLayerID = sortingIdUnit;
      cObject.position.y    = -0.56f;
      cObject.position.z    = 0.1f;
      source.color          = colorPawnIdle;

      break;

     case States.LayerPawns.Idle:
      source.sortingOrder   = 0;
      source.sortingLayerID = sortingIdUnit;
      cObject.position.y    = -0.56f;
      cObject.position.z    = 0.1f;
      source.color          = colorPawnIdle;


ACTORS - мой фреймворк на Unity
Until We Die - игра над которой работаю



Сообщение отредактировал pixeye - Суббота, 05 Октября 2019, 10:17
alexsilentДата: Суббота, 05 Октября 2019, 10:20 | Сообщение # 22
почти ветеран
Сейчас нет на сайте
pixeye, почитал статью) прикольно) мне очень понравилось!
И мне тоже не нравится сложность меканима.
https://github.com/dimmpixeye/blog-ru/issues/2

Чтобы не мучаться с этими стрелочками я их просто не добавлял.
И запускаю анимацию скриптом:
Код

private var oldAnimMode  : String;
function Animate(AnimMode : String , SpeedCross : float) {
    if (AnimMode != oldAnimMode) {
  oldAnimMode = AnimMode;
  anim.CrossFadeInFixedTime(AnimMode,SpeedCross );
    }
}


то есть по сути, это просто самовольный запуск любой анимации, без раставления стрелочек,
все переходы анимации написаны по старому внутри скрипта) так намного удобнее для меня,
чем возиться с паутиной из стрелок)
pixeyeДата: Суббота, 05 Октября 2019, 10:24 | Сообщение # 23
Red Winter Software
Сейчас нет на сайте
просто совет вообще - не пытайся все понять в программировании. Вот ты в начале там форума написал что посмотрел на листы на майкрософте и малость прифигел) да я бы тоже прифигел.
Все что тебе нужно знать о листах на начальном этапе это то что

Код

var myList = new List<int>();
myList.Add(10);
myList.Remove(10);


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

Потом ты понял что лист всеголишь массив и если на то пошло все контейнеры так или иначе идут от массива. Когда потолок достигается массив надо расширить. А это чего-то стоит. И допустим тебе на старте надо добавить 1000 элементов. И ты узнаешь что оказывается можно сделать коробку сразу на 1000 элементов. И таким образом на старте инициализации чуть облегчить себе бремя.

Код

var myList = new List<int>(1000); // вот так
myList.Add(10);
myList.Remove(10);


ACTORS - мой фреймворк на Unity
Until We Die - игра над которой работаю



Сообщение отредактировал pixeye - Суббота, 05 Октября 2019, 10:29
alexsilentДата: Суббота, 05 Октября 2019, 10:35 | Сообщение # 24
почти ветеран
Сейчас нет на сайте
А ещё мой аниматор персонажей с кучей анимацией выглядит намного чище,
чем классические сборки аниматора на юнити. Не паутина :P


Добавлено (05 Октября 2019, 10:39)
---------------------------------------------
Цитата pixeye ()
Вот тот же код просто по фреймворку без игровой логики

так намного проще) чем меньше кода, тем мне легче вникнуть)

Цитата pixeye ()
Все что тебе нужно знать о листах на начальном этапе это то что

В List мне ещё нужен был Push, то есть запихивание новой яйчейки в самое начало, сдвигая всех.
Но в этой теме уже объяснили как делать, хотя я ещё не тестировал тот метод)

Плюс, теперь мне нужно понять как работать с Dictionary, хочу вызывать яйчейку по имени, а не номеру.
Пошёл гуглить)

Добавлено (05 Октября 2019, 10:40)
---------------------------------------------
pixeye, Спасибо большое за советы! Я ещё почитаю про Actors Фреймворк! В целом, мне нравятся вещи, которые упрощают жизнь в программировании.


Сообщение отредактировал alexsilent - Суббота, 05 Октября 2019, 10:41
pixeyeДата: Суббота, 05 Октября 2019, 10:54 | Сообщение # 25
Red Winter Software
Сейчас нет на сайте
А не хочешь в сторону https://defold.com/ посмотреть? там кстати в блоге что ты читал про аниматор в коментах как раз написал один из разрабов дефолда ( можно помучать вопросами ) . Просто если для тебя так важен упор на скриптинг то ЛУА конечно гораздо проще вроде бы )

ACTORS - мой фреймворк на Unity
Until We Die - игра над которой работаю



Сообщение отредактировал pixeye - Суббота, 05 Октября 2019, 10:58
alexsilentДата: Суббота, 05 Октября 2019, 10:59 | Сообщение # 26
почти ветеран
Сейчас нет на сайте
Цитата pixeye ()
А не хочешь в сторону https://defold.com/ посмотреть?

Я как раз полгода назад Lua выучил, или уже почти год, не помню.
Учил на Tic 80, потом попробовал перейти на Defold, и застопарился там на нескольких вещах:
1) было плохо с оффлайн документацией, я не могу работать онлайн, отвлекает ютюб или другие вещи)
2) и как-то сложно с примерами игр, мне пришлось их из каких-то странных папок вручную перетаскивать
3) там сложно настроить PixelPerfect графику с низким разрешением, и чтобы можно размер экрана вручную
как угодно изменять, как например в Годот, в пару кликов все настройки меняются.
я потом решил вернуться и посмотреть побольше на Defold, когда его отполируют, но так пока больше не добирался)
надо бы как-нибудь проверить, чего там натворили за это время)

Добавлено (06 Октября 2019, 03:01)
---------------------------------------------
Нашёл в документации по словарям инфу, этот пример будет также хорошо работать в юнити?
https://docs.microsoft.com/ru-ru....ork-4.8

И раз тут два поля, значить это не будет видно в инспекторе? А можно сделать чтоб было видно?

Код
openWith.Add("txt", "notepad.exe");


Сообщение отредактировал alexsilent - Суббота, 05 Октября 2019, 11:04
drcrackДата: Воскресенье, 06 Октября 2019, 03:05 | Сообщение # 27
старожил
Сейчас нет на сайте
Цитата
А можно сделать чтоб было видно?

можно, гугли unity serializable dictionary

PS мне не совсем понятно название темы. что значит "не программист"? сейчас что ли как-то по другому называют людей которые пишут код на языках программирования? :D
alexsilentДата: Воскресенье, 06 Октября 2019, 04:16 | Сообщение # 28
почти ветеран
Сейчас нет на сайте
Цитата drcrack ()
сейчас что ли как-то по другому называют людей которые пишут код на языках программирования?

drcrack, я просто не силён в сложные вещи, тот же ООП я только поверхностно использую.
И медленно пишу код. Надо было написать "для новичка/нуба",
но я уже лет 16-18 программирую, так что сложно назвать новичком,
но всё ещё мне сложно с программированием. crazy

Добавлено (09 Октября 2019, 13:12)
---------------------------------------------
У C# есть один плюс по сравнению с JS для меня:

Код
void MyFunction(int Num = 10) {}


наконец-то можно использовать переменные в функции по умолчанию,
то есть можно не указывать переменную в MyFunction(); если хочется получить значение по дефолту, это круто,
соскучился я по такой операции)

И пишу длинный список строк кода альтернатив, чтоб быстро вникнуть в C#:
pixeyeДата: Среда, 09 Октября 2019, 15:34 | Сообщение # 29
Red Winter Software
Сейчас нет на сайте
Цитата alexsilent ()
но я уже лет 16-18 программирую, т

ну ты либо гений и это мы на самом деле не допираем до тебя либо ты из тех кто собирал кубик рубика всю жизнь и так и не собрал : )


ACTORS - мой фреймворк на Unity
Until We Die - игра над которой работаю

alexsilentДата: Четверг, 10 Октября 2019, 12:41 | Сообщение # 30
почти ветеран
Сейчас нет на сайте
pixeye, мне сложно с алгоритмами и другими около математическими вещами, потому медленно тут всё идёт, в отличии от творчества, рисования или анимации. Но за меня больше никто программировать не будет за бесплатно так долго, поэтому пришлось учить.)

Сообщение отредактировал alexsilent - Четверг, 10 Октября 2019, 12:43
drcrackДата: Четверг, 10 Октября 2019, 13:49 | Сообщение # 31
старожил
Сейчас нет на сайте
у alexsilent 760 постов на форуме и в 700 из них он жалуется как тяжело ему дается программирование

Сообщение отредактировал drcrack - Четверг, 10 Октября 2019, 13:49
alexsilentДата: Четверг, 10 Октября 2019, 13:50 | Сообщение # 32
почти ветеран
Сейчас нет на сайте
drcrack, это да :3

Добавлено (10 Октября 2019, 13:52)
---------------------------------------------
Ну постепенно прогресс идёт)

Оформил до конца часто используемые строки кода с JS на C#,
чтоб потом отдельно на каждый вопрос не отвлекаться подолгу потратил пару суток на это:

drcrackДата: Четверг, 10 Октября 2019, 14:01 | Сообщение # 33
старожил
Сейчас нет на сайте
локальные переменные можно обьявлять с помощью var чтобы не захламлять код:
Код

// public Dictionary<string,int> dict = new Dictionary<string,int>();
var dict = new Dictionary<string,int>();


также в новых юнити уже давно работает интерполяция строк:
Код

// Debug.Log("Active Scene is '" + scene.name + "'.");
Debug.Log($"Active Scene is '{scene.name}'.");


это хз, первый раз вижу такую конструкцию :D
Код
AudioSource ase = obj.AddComponent(typeof(AudioSource)) as AudioSource;

адекватный вариант такой:
Код
var ase = obj.AddComponent<AudioSource>();


Сообщение отредактировал drcrack - Четверг, 10 Октября 2019, 14:05
alexsilentДата: Четверг, 10 Октября 2019, 14:09 | Сообщение # 34
почти ветеран
Сейчас нет на сайте
drcrack, Спасибо большое за коррекции!

Добавлено (10 Октября 2019, 14:10)
---------------------------------------------
Цитата drcrack ()
это хз, первый раз вижу такую конструкцию


Это я где-то в сети подглядел, не помню)

Добавлено (10 Октября 2019, 14:11)
---------------------------------------------
Цитата drcrack ()
также в новых юнити уже давно работает интерполяция строк:
Код

// Debug.Log("Active Scene is '" + scene.name + "'.");
Debug.Log($"Active Scene is '{scene.name}'.");


Вау, вот эта штука офигенная! *__*

Добавлено (10 Октября 2019, 14:13)
---------------------------------------------
Цитата drcrack ()
адекватный вариант такой:
Код
var ase = obj.AddComponent<AudioSource>();


Тут кстати стоит var, а если это не локальная переменная,
и будет переменная использоваться пока не удалиться GameObject или текущий скрипт,
а не только в одном цикле, там тоже можно ставить var?
Хотя я походу просто перепутал фразу "локальная переменная", это для меня звучит как переменная на один цикл)
В конечном итоге можно, я думаю и так написать, если захочется получить доступ из другого скрипта:

Код
AudioSource ase = obj.AddComponent<AudioSource>();


Сообщение отредактировал alexsilent - Четверг, 10 Октября 2019, 14:20
drcrackДата: Четверг, 10 Октября 2019, 14:19 | Сообщение # 35
старожил
Сейчас нет на сайте
Цитата
а если это не локальная переменная,
а будет использоваться пока не удалиться GameObject, а не только в одном цикле,
там тоже можно ставить var?

var абсолютно ничего не меняет в поведении переменной, он просто сокращает код (тип определяется автоматически исходя из того что стоит справа от =)
если ты работаешь в IDE а не в блокноте то var также поддерживает все фичи какие бы на его месте поддерживал тип (ctrl click / f12 для перехода к определению и тд)

Цитата
Вау, вот эта штука офигенная! *__*

у нее еще и форматы есть (аналогично string.Format):
Код

var a = 1.2345f;
var b = 5;
Debug.Log($"a: {a:f2}, b: {b:d3}");
// a: 1.23, b: 005

в данном случае это определенное число знаков после запятой и автоматическая добивка нулями до нужной длины


Сообщение отредактировал drcrack - Четверг, 10 Октября 2019, 14:25
alexsilentДата: Пятница, 11 Октября 2019, 04:48 | Сообщение # 36
почти ветеран
Сейчас нет на сайте
Цитата drcrack ()
{a:f2}, b: {b:d3}


drcrack, Это шикарно! Мне бы весь список фич найти, может там что ещё полезное есть!
Пошёл гуглить просторы интернета) Спасибо!

Добавлено (11 Октября 2019, 04:52)
---------------------------------------------
Цитата drcrack ()
var абсолютно ничего не меняет в поведении переменной, он просто сокращает код (тип определяется автоматически исходя из того что стоит справа от =)


А что если делать неопределённую переменную? Допустим, я не знаю заранее будет ли это float,string или int,
можно ли так сделать, что введёшь в поле, такой переменная и станет? Или это слишком круто?!
Допустим я хочу просто оставить несколько полей пустыми, и не знаю какие переменные туда пока добавлю в класс,
и в зависимости от ситуации я бы добавлял нужные переменные, было бы очень удобно, особенно для своего самодельного
языка (чтоб скриптовать уровни на лету), где не знаешь какие переменные будут заранее.


Сообщение отредактировал alexsilent - Пятница, 11 Октября 2019, 04:52
drcrackДата: Пятница, 11 Октября 2019, 05:06 | Сообщение # 37
старожил
Сейчас нет на сайте
Цитата
Мне бы весь список фич найти, может там что ещё полезное есть!

решарпер (а может студия) показывает подсказку с примерами как только ставишь двоеточие

Цитата
А что если делать неопределённую переменную? Допустим, я не знаю заранее будет ли это float,string или int,
можно ли так сделать, что введёшь в поле, такой переменная и станет? Или это слишком круто?!
Допустим я хочу просто оставить несколько полей пустыми, и не знаю какие переменные туда пока добавлю в класс,
и в зависимости от ситуации я бы добавлял нужные переменные, было бы очень удобно, особенно для своего самодельного
языка (чтоб скриптовать уровни на лету), где не знаешь какие переменные будут заранее.

гугли "c# dynamic", как раз для интеграции скриптовых языков обычно и используется


Сообщение отредактировал drcrack - Пятница, 11 Октября 2019, 05:07
seamanДата: Пятница, 11 Октября 2019, 13:30 | Сообщение # 38
старожил
Сейчас нет на сайте
С dynamic поосторожнее. Пару месяцев назад проверял - он на webgl не поддерживается.

Ну и вообще динамическая типизация - отличный способ выстрелить себе в ногу.
alexsilentДата: Понедельник, 14 Октября 2019, 21:37 | Сообщение # 39
почти ветеран
Сейчас нет на сайте
seaman, Спасибо! Тогда не буду этим пользоваться, на всякий случай!

Добавлено (14 Октября 2019, 21:42)
---------------------------------------------
У меня появился новый вопрос про Dictionary:
Могу ли я использовать Dictionary как заменитель переменных?
допустим у меня 1000 юнитов на поле, и у каждого юнита я добавлю свой массив Dictionary,
в этом массиве будут такие пункты при инициализации:
Код

public Dictionary<string,int> dict = new Dictionary<string,int>();
...
dict.Add("Health", 10);
dict.Add("Mana", 20);
dict.Add("Exp", 0);
dict.Add("Level", 1);
dict.Add("Team", 0);
dict.Add("Attack", 0);
dict.Add("Defense", 0);
dict.Add("Stamina", 0);


Не будет ли это проблемой? С точки зрения лагов или ещё чего-то непредвиденного?

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

Добавлено (14 Октября 2019, 22:22)
---------------------------------------------
Сделал 100 миллионов слотов Dictionary, и юнити завис)
Видимо так много нельзя создавать, просто делал стресс тест.


Сообщение отредактировал alexsilent - Понедельник, 14 Октября 2019, 22:23
seamanДата: Понедельник, 14 Октября 2019, 22:58 | Сообщение # 40
старожил
Сейчас нет на сайте
Поизучайте наследование.
Гораздо лучше Сделать базовый класс Юнита с переменными
Код
public class BaseUnit
{
  public float Health = 10;
  public float Mana = 20;
  public float Exp = 0;
  public int Level = 1;
  public int Team = 0;
  public float Attack = 0;
  public float Defense = 0;
  public float Stamina = 0;
}


И производные классы
Код
public class Warrior : BaseUnit{...}
public class Hunter : BaseUnit{...}

Это, конечно чисто основа. На самом деле тут все будет слегка сложнее. Правильно все подстраивать под Вашу систему прокачки...

Можно еще глянуть старенькие уроки BurzergArcade.
https://www.youtube.com/playlist?list=PLE5C2870574BF4B06
Там где то с 18 урока как раз базовый класс персонажа.
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Переход с UnityScript на Csharp для не программиста
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск:

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