Вторник, 28 Января 2020, 23:24

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 41
  • 1
  • 2
  • 3
  • 40
  • 41
  • »
Форум игроделов » Записи участника » alexsilent [816]
Результаты поиска
alexsilentДата: Вторник, сегодня, 11:40 | Сообщение # 1 | Тема: Порядок запуска скриптов
заслуженный участник
Сейчас нет на сайте
drcrack, лол) я просто с нуля архитектуру переписываю, с JS на С# , как раз думаю, как улучшить её,
судя по комменту лучше не увлекаться большим количеством скриптов, у меня в прошлой игре было примерно 150 скриптов)
Плюс мне тут только что посоветовали вообще не использовать Script Execution Order, подумываю больше не использовать
системные команды типа Awake Start Update и FixedUpdate для важных скриптов, и возможно буду вызывать лишь из одного глобального скрипта. Переназвав эти переменные в Awaker, Starter, Updater, FixedUpdater, и из глобального скрипта для меня в нужном порядке вызывать эти функции, вместо автоматического вызова.
Пока ещё не решил точно, может по другому сделаю, но хочу в этот раз сделать всё намного лучше, чем мой прошлый вариант.
Учесть все подводные камни, что раньше не учёл.


мои арты и страница на Девиантарте
моя игра в духе Fallout
моя леталка


Сообщение отредактировал alexsilent - Вторник, 28 Января 2020, 11:49
alexsilentДата: Вторник, сегодня, 09:33 | Сообщение # 2 | Тема: Порядок запуска скриптов
заслуженный участник
Сейчас нет на сайте
Хочу поменьше использовать Script Execution Order функцию, мне кажется если я там много скриптов повешу,
то оно будет запутаннее работать, но это не точно, но на всякий случай избегаю лишний раз.
И в связи с этим появился вопрос:

Если я запущу объекты в таком порядке:
Код

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

public class PreInit : MonoBehaviour
{
    // Runs before a scene gets loaded
    [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
    public static void LoadMain()
    {
  // init/create global and system objects/scripts
  GameObject.Instantiate(Resources.Load("Game"));
  GameObject.Instantiate(Resources.Load("HUDCamera"));
    }
}


то Awake у них будет работать правильно, то есть скрипт у объекта Game пробудиться раньше, чем у HUDCamera.
Но как будут работать Start, FixedUpdate и Update функции? Будут ли они в таком же порядке работать, то есть вначале
всегда обязательно будет скрипт Game читаться, а потом всегда без исключений HUDCamera?


То есть мне нужен такой порядок запуска функций:


Это можно потестить, но я встречал такой феномен в других своих кодах,
когда долго тестишь порядок работы скриптов в юнити,
и всё нормально кажется, а потом вдруг однажды скрипт срабатывает не в том порядке, это происходит как-то хаотично,
если не использовать Script Execution Order, не всегда понимаю отчего вдруг скрипты стали работать в хаотичном порядке.
Или лучше всё-таки стоит использовать всегда Script Execution Order функцию, даже если 50-100 скриптов придётся туда запихать?


мои арты и страница на Девиантарте
моя игра в духе Fallout
моя леталка


Сообщение отредактировал alexsilent - Вторник, 28 Января 2020, 09:52
alexsilentДата: Пятница, 10 Января 2020, 15:10 | Сообщение # 3 | Тема: Как вы ещё используете SceneManager?
заслуженный участник
Сейчас нет на сайте
Цитата drcrack ()
а ты так пишешь как будто его еще в прошлой версии не было

да я только перехожу на новую версию, ибо раньше всегда сидел на старой юнити и пользовался JS,
новые версии c 2017.3 кажется уже не поддерживают JS, сейчас переписываю на C#,
пришлось принять как данность, что Application.LoadLevel больше не использовать)


мои арты и страница на Девиантарте
моя игра в духе Fallout
моя леталка
alexsilentДата: Четверг, 09 Января 2020, 13:53 | Сообщение # 4 | Тема: Как вы ещё используете SceneManager?
заслуженный участник
Сейчас нет на сайте
pixeye,
Цитата pixeye ()
Вообще я бы аккуратно с мультисценами работал) имхо гемороя от них часто больше чем пользы.

Я тогда вообще не понимаю зачем SceneManager придумали),
лучше бы и дальше все пользовались Application.LoadLevel :)

А ещё я окончательно запутался как мне использовать SceneManager) пошёл гуглить уроки по этому менеджеру,
а то у меня теперь сомнения: нужно ли выгружать старые уровни, чтобы загрузить новые, или автоматически всё происходит)
полез искать примеры обычного аналога Application.LoadLevel


мои арты и страница на Девиантарте
моя игра в духе Fallout
моя леталка


Сообщение отредактировал alexsilent - Четверг, 09 Января 2020, 13:57
alexsilentДата: Четверг, 09 Января 2020, 11:43 | Сообщение # 5 | Тема: Как вы ещё используете SceneManager?
заслуженный участник
Сейчас нет на сайте
Цитата drcrack ()
ты можешь поставить их на отдельный слой и в настройках камеры отключить его рендеринг

А в таком состоянии работает ли рейтресинг или например функция OnMouseDown()?
Потому-что у меня там много системных кнопок, которые можно случайно нажать.
А мне этого не надо, потому и подальше отодвигаю объекты.

Цитата drcrack ()
SceneManager.LoadSceneAsync("scenename", LoadSceneMode.Additive);


Спасибо!
Я так понял, если юзать без LoadSceneMode.Additive, у меня будут старые мульти-уровни удаляться?!


мои арты и страница на Девиантарте
моя игра в духе Fallout
моя леталка


Сообщение отредактировал alexsilent - Четверг, 09 Января 2020, 11:45
alexsilentДата: Четверг, 09 Января 2020, 09:13 | Сообщение # 6 | Тема: Как вы ещё используете SceneManager?
заслуженный участник
Сейчас нет на сайте
Цитата drcrack ()
можно загрузить сцену аддитивно

Через
Код
SceneManager.MergeScenes
?

Цитата drcrack ()
(т.е. так, как бы ты делал, если бы они были на одной сцене)

Жаль, придётся искать другие способы, чтобы системные файлы, системные объекты и скрипты куда-то прятать на уровне,
как обычно приходится их куда-то далеко по координатам мира закидывать,
например через
Код
transform.position = new Vector3(-10000,-10000,-10000)


мои арты и страница на Девиантарте
моя игра в духе Fallout
моя леталка


Сообщение отредактировал alexsilent - Четверг, 09 Января 2020, 09:14
alexsilentДата: Четверг, 09 Января 2020, 08:27 | Сообщение # 7 | Тема: Посоветуйте необычные глобальные тактические игры
заслуженный участник
Сейчас нет на сайте
Ferrumel, Спасибо! Выглядит прикольно!

мои арты и страница на Девиантарте
моя игра в духе Fallout
моя леталка
alexsilentДата: Четверг, 09 Января 2020, 07:24 | Сообщение # 8 | Тема: C# необычная функция с возвращением результата
заслуженный участник
Сейчас нет на сайте
drcrack, я пока там запутался и решил откат сделать) пришлось по 2 раза писать.
Код

string word = words[0].Substring(1);
Game.Group[word].num[words[1]] = MathAction(Game.Group[word].num[words[1]], WORD);


Но зато пока работает)
потестил, можно уже писать свой первый мини скрипт, где пока есть только print, проверка if и инициализация данных словаря + математика с этими данными)



Язык у меня пока примитивный там, то есть надо обязательно слова разделять пробелом,
например вот так не будет работать
Код
$hero.hp=10
а нужно вот так
Код
$hero.hp = 10

ибо у меня всё через Split(" "[0]) по пробелам ищу новые словам, и других будет куча ограничений,
но зато можно будет легко делать уровневые скрипты, как я раньше на JS делал, в одной из своих игр:




мои арты и страница на Девиантарте
моя игра в духе Fallout
моя леталка


Сообщение отредактировал alexsilent - Четверг, 09 Января 2020, 08:05
alexsilentДата: Четверг, 09 Января 2020, 07:01 | Сообщение # 9 | Тема: Как вы ещё используете SceneManager?
заслуженный участник
Сейчас нет на сайте
Мне кажется SceneManager сделали для удобства, но какое удобство с этим может быть!?
Я пока не совсем понимаю.
Можно ли что-то большее выжать из SceneManager, чем просто загрузка уровня?
Код
SceneManager.LoadScene("scenename");


1) Можно ли сделать SceneManager, как альтернативу DontDestroyOnLoad?
В теории, мне кажется можно, но пока не понял как. Мне вот например, нужно сделать камеру HUD,
чтобы она никогда не удалялась, и при перезагрузке уровня была промежуточным окном между уровнями,
как например в Скайриме:

2) Как вы иначе используете SceneManager, есть ли у этого менеджера другие цели и возможности?
3) Если создать несколько уровней: активный для игры, а остальные для данных и системных скриптов и объектов.
Как сделать так, чтобы был виден только активный уровень, а остальные работали, но не были видны в игре?

PS Я просто до этого всегда использовал оператор Application.LoadLevel (или как-то так), но он уже устарел,
и мне теперь интересно, зачем целый менеджер городить ради этого, неужели там много новых интересных фич и удобств?


мои арты и страница на Девиантарте
моя игра в духе Fallout
моя леталка


Сообщение отредактировал alexsilent - Четверг, 09 Января 2020, 07:10
alexsilentДата: Четверг, 09 Января 2020, 05:44 | Сообщение # 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



мои арты и страница на Девиантарте
моя игра в духе Fallout
моя леталка


Сообщение отредактировал alexsilent - Четверг, 09 Января 2020, 06:27
alexsilentДата: Вторник, 07 Января 2020, 10:11 | Сообщение # 11 | Тема: C# необычная функция с возвращением результата
заслуженный участник
Сейчас нет на сайте
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 или я не так это делаю) буду гуглить, ибо что-то пошло не так, может я просто накосячил в коде.


мои арты и страница на Девиантарте
моя игра в духе Fallout
моя леталка


Сообщение отредактировал alexsilent - Вторник, 07 Января 2020, 16:07
alexsilentДата: Вторник, 07 Января 2020, 09:25 | Сообщение # 12 | Тема: C# необычная функция с возвращением результата
заслуженный участник
Сейчас нет на сайте
Цитата drcrack ()
просто меняй как будто ты вообще не в функции а там откуда ты ее вызываешь

Большое Спасибо! Не знал что так можно делать, такой код хорошо читается и приятно выглядит!

Цитата drcrack ()
сделай несколько AddAction с разными комбинациями параметров
компилятор сам выберет нужную, это называется "перегрузка методов"


Я боялся делать несколько функций с одинаковыми именами и разными входящими типами данных,
мне казалось компилятор будет медленнее читать такой код, ибо будет искать 2 или больше функций вместо одной,
но если это не влияет на производительность, то круто!


мои арты и страница на Девиантарте
моя игра в духе Fallout
моя леталка
alexsilentДата: Вторник, 07 Января 2020, 08:38 | Сообщение # 13 | Тема: C# необычная функция с возвращением результата
заслуженный участник
Сейчас нет на сайте
Цитата drcrack ()
так вот, с Dictionary тебе в общем-то и ref не нужен, он и так всегда передается по ссылке
т.е. ты можешь внутри AddAction менять значения в своем словаре и это будет просто работать без лишнего кода

А как это работает, какой код надо написать?
Или имеется ввиду просто запомнить имя словаря и изменить его прямо в функции?
Просто у меня функция AddAction будет работать не только со словарём, но и несколькими другими переменными,
например там могут быть строки типа:
Код

AddAction(Game.WindPower,1);
AddAction(Game.Day,1);
AddAction(Hero.HP,1);

и другие переменные, которые не входят в словарь, тоже будут работать с этим скриптом
или я просто не так понял суть

Добавлено (07 Января 2020, 08:43)
---------------------------------------------


мои арты и страница на Девиантарте
моя игра в духе Fallout
моя леталка


Сообщение отредактировал alexsilent - Вторник, 07 Января 2020, 08:47
alexsilentДата: Вторник, 07 Января 2020, 07:22 | Сообщение # 14 | Тема: C# необычная функция с возвращением результата
заслуженный участник
Сейчас нет на сайте
drcrack, точно Спасибо! Круто что в C# тоже можно сделать такое!
С этим же нет никаких проблем или подводных камней, можно ли ref делать с Dictionary?


мои арты и страница на Девиантарте
моя игра в духе Fallout
моя леталка


Сообщение отредактировал alexsilent - Вторник, 07 Января 2020, 07:23
alexsilentДата: Вторник, 07 Января 2020, 06:56 | Сообщение # 15 | Тема: C# необычная функция с возвращением результата
заслуженный участник
Сейчас нет на сайте
Сейчас я допиливаю свой мини скриптер, чтобы программировать уровни без компиляции.
Я не особо программист, больше художник, но вроде пока получается,
до этого я давно на JS делал подобный скриптер в юнити, но с большим
количеством проблем и не оптимизированных моментов.

И хотел спросить, можно ли вместо такой функции:
Код

void Awake() {
    int MaxHP = 10;
    MaxHP = AddAction(MaxHP,1);
}

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, что если даже не замедляет скорость кода,
но точно это выглядит сложно и не оптимизированно:
Код

Game.Group[words[0].Substring(1)].num[words[1]] = AddAction(Game.Group[words[0].Substring(1)].num[words[1]],PlusNumber);


где Game.Group[words[0].Substring(1)].num[words[1]] повторяется два раза, это Dictionary в Dictionary,
довольно массивно, не правда ли?


мои арты и страница на Девиантарте
моя игра в духе Fallout
моя леталка


Сообщение отредактировал alexsilent - Вторник, 07 Января 2020, 07:14
alexsilentДата: Понедельник, 06 Января 2020, 11:10 | Сообщение # 16 | Тема: Несколько вопросов по float
заслуженный участник
Сейчас нет на сайте
Цитата Xakep ()
(a >= b)

Вот это для меня было шоком, ибо в старых кодах я часто использовал для float такую проверку.

Про `nearlyEqual`, спасибо! Погуглю насколько быстрая эта операция.


мои арты и страница на Девиантарте
моя игра в духе Fallout
моя леталка
alexsilentДата: Понедельник, 06 Января 2020, 08:52 | Сообщение # 17 | Тема: Несколько вопросов по float
заслуженный участник
Сейчас нет на сайте
drcrack, похоже и правда стоит отказаться от float в большинстве своих переменных. Спасибо)

мои арты и страница на Девиантарте
моя игра в духе Fallout
моя леталка


Сообщение отредактировал alexsilent - Понедельник, 06 Января 2020, 08:53
alexsilentДата: Понедельник, 06 Января 2020, 08:26 | Сообщение # 18 | Тема: Несколько вопросов по float
заслуженный участник
Сейчас нет на сайте
Цитата drcrack ()
"0.02 HP" вообще не имеет смысла т.к. HP это health (hit) point и он неделим по определению

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


мои арты и страница на Девиантарте
моя игра в духе Fallout
моя леталка


Сообщение отредактировал alexsilent - Понедельник, 06 Января 2020, 08:28
alexsilentДата: Понедельник, 06 Января 2020, 07:01 | Сообщение # 19 | Тема: Несколько вопросов по float
заслуженный участник
Сейчас нет на сайте
drcrack, а как быть с другими переменными, например Health? Какие там копейки? Просто иногда в игре может нужно отнять 0.02 HP например. Там тоже в уме держать, что 1000 HP, это значить 10.00 HP на самом деле?

Добавлено (06 Января 2020, 07:04)
---------------------------------------------
afq, Спасибо, погуглю, не знаю пока ничего про это. Если там также нестабильно работает проверка "if" как во float, то не очень хорошая перспектива.


мои арты и страница на Девиантарте
моя игра в духе Fallout
моя леталка


Сообщение отредактировал alexsilent - Понедельник, 06 Января 2020, 07:05
alexsilentДата: Понедельник, 06 Января 2020, 06:36 | Сообщение # 20 | Тема: Несколько вопросов по float
заслуженный участник
Сейчас нет на сайте
Цитата drcrack ()
Цитата
>>PS в идеале я уже думал использовать только int числа, вместо float, например int = 100, это значить 1.00f,

именно так это и сделано в 99.9999% приложений и игр


А как это реализуют? Есть ли английское название у этого феномена, чтоб погуглить?!
Или разработчики просто в уме держат, что 100 = 1.00f, а там где это число надо вывести на экран снижают на два нуля?
Хотелось бы не запутаться, чтоб в уме не держать, но как реализовать, что-то идеи не приходят.


мои арты и страница на Девиантарте
моя игра в духе Fallout
моя леталка


Сообщение отредактировал alexsilent - Понедельник, 06 Января 2020, 06:39
Форум игроделов » Записи участника » alexsilent [816]
  • Страница 1 из 41
  • 1
  • 2
  • 3
  • 40
  • 41
  • »
Поиск:

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