(т.е. так, как бы ты делал, если бы они были на одной сцене)
Жаль, придётся искать другие способы, чтобы системные файлы, системные объекты и скрипты куда-то прятать на уровне, как обычно приходится их куда-то далеко по координатам мира закидывать, например через
Код
transform.position = new Vector3(-10000,-10000,-10000)
Сообщение отредактировал alexsilent - Четверг, 09 Января 2020, 09:14
drcrack, я пока там запутался и решил откат сделать) пришлось по 2 раза писать.
Код
string word = words[0].Substring(1); Game.Group[word].num[words[1]] = MathAction(Game.Group[word].num[words[1]], WORD);
Но зато пока работает) потестил, можно уже писать свой первый мини скрипт, где пока есть только print, проверка if и инициализация данных словаря + математика с этими данными)
Я тут сделал unitypackage (всего 10кб) со своими скриптами, чтоб дать оценить, но вряд ли это будет кому-то интересно, там пока готово 2 скрипта Code и Game: https://drive.google.com/open?id=1SIKqCwtIFKoU3HbvRghT4rjSUI0EeCUF
Язык у меня пока примитивный там, то есть надо обязательно слова разделять пробелом, например вот так не будет работать
Код
$hero.hp=10
а нужно вот так
Код
$hero.hp = 10
ибо у меня всё через Split(" "[0]) по пробелам ищу новые словам, и других будет куча ограничений, но зато можно будет легко делать уровневые скрипты, как я раньше на JS делал, в одной из своих игр:
Я просто не знаю как ещё делать скрипты для своих уровней без компиляции. Плагины обычно не обновляются и забрасываются, значить нужно искать свой вариант, пришлось думать, как сделать свой разбиватель текста на строки. А теперь ещё на C# переписываю с JS. Ибо юнити отказались от JS, а у меня весь движок был на нём написан.(
Сообщение отредактировал alexsilent - Четверг, 09 Января 2020, 08:05
Мне кажется SceneManager сделали для удобства, но какое удобство с этим может быть!? Я пока не совсем понимаю. Можно ли что-то большее выжать из SceneManager, чем просто загрузка уровня?
Код
SceneManager.LoadScene("scenename");
1) Можно ли сделать SceneManager, как альтернативу DontDestroyOnLoad? В теории, мне кажется можно, но пока не понял как. Мне вот например, нужно сделать камеру HUD, чтобы она никогда не удалялась, и при перезагрузке уровня была промежуточным окном между уровнями, как например в Скайриме:
2) Как вы иначе используете SceneManager, есть ли у этого менеджера другие цели и возможности? 3) Если создать несколько уровней: активный для игры, а остальные для данных и системных скриптов и объектов. Как сделать так, чтобы был виден только активный уровень, а остальные работали, но не были видны в игре?
PS Я просто до этого всегда использовал оператор Application.LoadLevel (или как-то так), но он уже устарел, и мне теперь интересно, зачем целый менеджер городить ради этого, неужели там много новых интересных фич и удобств?
Сообщение отредактировал alexsilent - Четверг, 09 Января 2020, 07:10
Ищу тактические игры, с глобальным миром и конкретными героями: 1) без разделения на отдельные уровни или главы (не как в Heroes of Might n Magic, где куча отдельных уровней, на которые не вернуться назад, и часто там вообще другие герои и история) 2) с управлением одним героем или командой (а не как в Sims или Civilization, где управляешь сразу всем) и если эти герои погибнут, то игра закончится. 3) Также подойдут любые JRPG/CRPG, где мир открыт сразу весь, а не будет открываться по сценарию, (мне очень нравится как было в Rings of Power на мегадрайве от Naughty Dogs) такая игра тоже пойдёт за необычную тактическую игру, где можешь с самого начала идти куда хочешь (чтобы в ролевой игре главное был не сюжет, а путешествие или что-то другое) 4) Желательно, чтобы там кипела псевдожизнь, то есть чтобы неписи принимали свои решения, захватывали базы и прочее, хотя это не приоритет, и можно забить на этот пункт 5) Оффлайн игра (желательно, ибо я не любитель онлайн игр, там часто совершенно другой баланс, расчитаный на то чтобы в игру годами играть, ибо онлайн игра жива, пока в неё заходят постоянно, а мне такой гемплей не нравится, особенно раздражают всякие дейлики и другие приёмы наркотического привыкания к игре)
PS примеры игр, какие больше всего понравились из подобного списка: Kenshi, Mount n Blade
PPS примеры игр в какие я хотел бы поиграть, и может быть что-то такое есть в индустрии: 1) как Master of Orion - только с уникальными героями, которыми бы я управлял и путешествовал бы по планетам, (в Элиту и Космические Рейнджеры я заиграл до дыр, но даже так это не совсем те игры, мне бы совместить Master of Orion с Mount & Blade, чтобы можно было бы набирать свою армию или охрану) 2) поиграл бы в Dune с глобальной картой, RTS где нет других уровней, только один, на нём строишь и собираешь ресурсы и воюешь, где у тебя не забирают твою армию и собранные ресурсы после победы (я бы тоже не прочь совместить Dune с Kenshi или Mount n Blade) и чтобы там был персонаж, что-то типа генерала, при убийстве которого игра бы заканчивалась, то есть всё-также как в Kenshi или Mount n Blade 3) Я бы даже поиграл в аналог Civilization , где управляешь одним персонажем или командой или одной семьёй, где постепенно развивается жизнь (были небольшие зачатки в игре про обезьян, типа наших предков, забыл как называется, в 2019-м вышла, но там недостаточно было развития, а так идея прикольная)
Сообщение отредактировал alexsilent - Четверг, 09 Января 2020, 06:27
Xakep, спасибо! Всё время забываю, что можно инициировать переменную с помощью var.
drcrack, попытался почитать про "C# generic" и это сложно для меня, кажется будто тут совсем другой язык, который я ещё не изучал, и он достаточно сложный для художника) Например, пример:
Код
class MyGenericClass<T> { private T genericMemberVariable;
public MyGenericClass(T value) { genericMemberVariable = value; }
public T genericMethod(T genericParameter) { Console.WriteLine("Parameter type: {0}, value: {1}", typeof(T).ToString(),genericParameter); Console.WriteLine("Return type: {0}, value: {1}", typeof(T).ToString(), genericMemberVariable);
return genericMemberVariable; }
public T genericProperty { get; set; } }
смотрю в него и вижу что-то непонятное, возможно причина в том, что мне всегда сложно ООП даётся, и я только поверхностные основы освоил, как дизайнеру мне легче понимать простые скрипты, которые обычно в Lua или Basic используют, и на основе тех языков я пытаюсь учить C#. Попробую потом ещё погуглить, может быть встречу более простые и понятные примеры.
Добавлено (07 Января 2020, 16:06) --------------------------------------------- Кажется ref не работает с dictionary или я не так это делаю) буду гуглить, ибо что-то пошло не так, может я просто накосячил в коде.
Сообщение отредактировал alexsilent - Вторник, 07 Января 2020, 16:07
просто меняй как будто ты вообще не в функции а там откуда ты ее вызываешь
Большое Спасибо! Не знал что так можно делать, такой код хорошо читается и приятно выглядит!
Цитатаdrcrack ()
сделай несколько AddAction с разными комбинациями параметров компилятор сам выберет нужную, это называется "перегрузка методов"
Я боялся делать несколько функций с одинаковыми именами и разными входящими типами данных, мне казалось компилятор будет медленнее читать такой код, ибо будет искать 2 или больше функций вместо одной, но если это не влияет на производительность, то круто!
так вот, с Dictionary тебе в общем-то и ref не нужен, он и так всегда передается по ссылке т.е. ты можешь внутри AddAction менять значения в своем словаре и это будет просто работать без лишнего кода
А как это работает, какой код надо написать? Или имеется ввиду просто запомнить имя словаря и изменить его прямо в функции? Просто у меня функция AddAction будет работать не только со словарём, но и несколькими другими переменными, например там могут быть строки типа:
и другие переменные, которые не входят в словарь, тоже будут работать с этим скриптом или я просто не так понял суть
Добавлено (07 Января 2020, 08:43) ---------------------------------------------
Если по хорошему, то мой полный код выглядит ещё сложнее, не просто AddAction, где только плюс, а вот так сделал, где можно разные математические вещи делать взяв их из строки string, но для вопроса я упростил это до AddAction, это на JS, я пока ещё не переписал эту функцию на C#:
Код
// Математические операции function MathAction(A : float,WORD : String[]) : int { //print("MathAction: "+A+" "+WORD[1]+" "+WORD[2]+" "+WORD[3]+" "+WORD[4]); // {A} {=+-*/} {B} ( {+-*/} {C} ) if (WORD[3] == "//") {WORD[3]=null;WORD[4]=null;} var B : float = GrabInt(WORD[2]); var C : float = GrabInt(WORD[4]); switch (WORD[1]+WORD[3]) { case "=": return B;break; // A = B
case "=+": return B+C; break; // A = B + C case "=-": return B-C; break; // A = B - C case "=*": return B*C; break; // A = B * C case "=/": return B/C; break; // A = B / C
case "+": return A+B; break; // A += B case "-": return A-B; break; // A -= B case "*": return A*B; break; // A *= B case "/": return A/B; break; // A /= B
case "+*": return A+B*C; break; // A + B * C case "-*": return A-B*C; break; // A - B * C case "+/": return A+B/C; break; // A + B / C case "-/": return A-B/C; break; // A - B / C
default: return B; break; // A = B } }
Сообщение отредактировал alexsilent - Вторник, 07 Января 2020, 08:47
Сейчас я допиливаю свой мини скриптер, чтобы программировать уровни без компиляции. Я не особо программист, больше художник, но вроде пока получается, до этого я давно на JS делал подобный скриптер в юнити, но с большим количеством проблем и не оптимизированных моментов.
int AddAction(int num, int num2) { return num+num2; }
Написать вот такую функцию:
Код
void Awake() { int MaxHP = 10; AddAction(MaxHP,1); // можно ли тут не повторять 2 раза "MaxHP" в строке? }
int AddAction(int num, int num2) { // похоже тут надо что-то изменить, чтобы num вернула результат назад? return num+num2; }
Чтобы моя функция AddAction вернула данные сразу в MaxHP, то есть чтобы на выходе MaxHP стал равен 11, я где-то давно встречал, что можно вернуть данные назад в вводную переменную в функции, но может быть это был не C#, а другой язык, и я даже не знаю как загуглить, ибо не знаю как это назвать правильно по английски.
Возможно что-то нужно написать в этой строке, рядом с num, чтобы данные назад вернулись оттуда прямо в MaxHP, но не могу вспомнить даже в каком языке это делал:
Код
int AddAction(int num, int num2) {
Добавлено (07 Января 2020, 07:13) --------------------------------------------- Просто к чему это я хочу сделать, у меня в реальном коде это выглядит малость сложнее, и два раза повторяется одно и тоже данное из Dictionary, что если даже не замедляет скорость кода, но точно это выглядит сложно и не оптимизированно:
"0.02 HP" вообще не имеет смысла т.к. HP это health (hit) point и он неделим по определению
У меня в ролевой игре, если уровень слишком маленький, то будет отниматься здоровье меньше, чем 1, это главная причина, почему я хочу оставить float, но боюсь что оно также и не точные параметры имеет. Не знаю как сделать, чтобы были и сотые доли, и числа точные, и не ниже 0.01.
Сообщение отредактировал alexsilent - Понедельник, 06 Января 2020, 08:28
drcrack, а как быть с другими переменными, например Health? Какие там копейки? Просто иногда в игре может нужно отнять 0.02 HP например. Там тоже в уме держать, что 1000 HP, это значить 10.00 HP на самом деле?
Добавлено (06 Января 2020, 07:04) --------------------------------------------- afq, Спасибо, погуглю, не знаю пока ничего про это. Если там также нестабильно работает проверка "if" как во float, то не очень хорошая перспектива.
Сообщение отредактировал alexsilent - Понедельник, 06 Января 2020, 07:05
Цитата >>PS в идеале я уже думал использовать только int числа, вместо float, например int = 100, это значить 1.00f,
именно так это и сделано в 99.9999% приложений и игр
А как это реализуют? Есть ли английское название у этого феномена, чтоб погуглить?! Или разработчики просто в уме держат, что 100 = 1.00f, а там где это число надо вывести на экран снижают на два нуля? Хотелось бы не запутаться, чтоб в уме не держать, но как реализовать, что-то идеи не приходят.
Сообщение отредактировал alexsilent - Понедельник, 06 Января 2020, 06:39
1) Какое максимальное число у float? Могу ли я хранить в нём большие числа, например миллиард? В документации пишут число 3.402823466 E + 38, но я не понимаю, что тут написано, как понять в обычных числах?
Просто хочу понять, можно ли использовать float для золота в игре? Я понимаю, что лучше использовать int, но мне будет сложно сделать int и float в своём движке, так как я делаю свой мини-скрипт, чтоб управлять числами, и храню все числа в dictionary, мне и так для этого пришлось два dictionary сделать, float и string, а теперь думаю может придётся ещё третий dictionary вводить - int?! Или же можно обойтись без int, используя float?!
2) Можно ли как-то сделать так, чтобы float имел только два знака после запятой 1000.03 например. Мне не нравится, что у float может запятая далеко уходить. Есть ли какие-то преднастройки float в C# или придётся работать с числами типа 1000.03034045? Мне бы хватило сотых долей, абсолютно для любых моих нужд в игре, ибо мне не нужна сверх точность в тысячных долях. 3) Насколько точно оператор if проверяет float? Может ли оператор ошибиться? Просто я как-то встречал феномен, когда в юнити я ставлю координаты 0.05, а через некоторое время юнити мне портит это число превращая его в 0.049999999999, хз с чем это связано, но я боюсь, что однажды проверка не пройдёт. Например поставлю float = 4, а юнити мне сделает 3.999999999 и if пропустит, я не знаю как оно работает, но мало ли.
PS в идеале я уже думал использовать только int числа, вместо float, например int = 100, это значить 1.00f, Но как сделать подобный трюк, чтобы C# у всех для меня нужных int, считал последние две цифры как сотые доли?
Сообщение отредактировал alexsilent - Понедельник, 06 Января 2020, 05:45
Пишу свой примитивный мини-язык, для программирования диалогов, выборов в диалогах, скрипты на уровнях без компиляции и другие вещи, где нужно использовать такой быстрый метод, а также скрипт автоматически ставится на паузу во время диалога или при паузе игры, я уже всё это делал на JS, теперь переношу скриптер на C#. В скрипте все слова должны быть отделены пробелом, но иногда я могу ошибиться и написать 2 пробела, и тогда между двух пробелов Split(" "[0]) команда сделает пустое слово, а мне пустые слова не нужны.
Нашёл инфу, как разбить String на слова и убрать пробелы и пустые слова, но мой код не работает, не могу понять, что не так я написал:
Код
string word = "dff dfg fggk gj d f f gj rtyyiyi gj"; string[] words= word.Split(" "[0], StringSplitOptions.RemoveEmptyEntries);
Дебаггер юнити пишет: The name 'StringSplitOptions' does not exist in the current context
Не понимаю концепцию разбития на слова без пустых слов, но мне кажется это легко делать в C#, не создавая два массива, как бы я раньше делал в JS, создав массив из Split, а потом перегоняя всё в другой массив попутно пропуская пустые слова.
Сообщение отредактировал alexsilent - Пятница, 03 Января 2020, 15:35
Ну так используйте для скриптинга Lua, в чем дело то? Куча фреймворков есть
Я находил несколько старых Lua плагинов для юнити, а практически всегда старые плагины не работают для новой юнити, у меня 90% старые плагины (которые я раньше использовал) выдают ошибки, и я даже не стал пробовать. Есть ли какой-нибудь актуальный Lua плагин для юнити на текущий момент? И что делать, если юнити снова обновится так, что старые плагины перестанут работать, а обновления не последует на этот плагин? Обычно оно так и происходит, поэтому я старался использовать всё своё, даже если оно кривое, смогу понять, где у меня ошибки, и как поправить.
Сообщение отредактировал alexsilent - Пятница, 03 Января 2020, 13:27
Спасибо! Хотя думал будет много критики в сторону моего способа)
Добавлено (02 Января 2020, 16:11) --------------------------------------------- Про dynamic прикольная статья, звучит как переменные в Lua, мне очень нравится программирование на Lua из-за динамических переменных, когда не уверен какая переменная будет. Хотя кажется (если не ошибаюсь) тут на форуме я видел комменты в духе, что лучше не пользоваться такими переменными в C#.
Сообщение отредактировал alexsilent - Четверг, 02 Января 2020, 16:11