Пытаюсь разобраться с UI (то есть мне он не нравится, и я всегда использовал Game Object для создания интерфейса игры, я рад был бы вообще его не использовать) но теперь просто хочу все свои объекты интерфейса разместить на UI Canvas, для 3д игр, чтобы интерфейс был всегда поверх 3д графики, например мне нужно вырисовывать инвентарь, поэтому я не хочу использовать стандартные средства UI, да и у меня нет времени их изучать и переписывать весь код под UI, а также все окна меню придется перепиливать под UI объекты и это болезненно, когда все написано под GameObject-ы. Мне нужно отображать 3д игровые объекты, а не отдельные картинки, и в связи с этим пару вопросов:
1) Можно ли перекрыть 3д объекты игры, 3д объектами интерфейса? Чтобы HUD всегда был впереди при любом варианте?
2) Иногда, если находишься рядом с 3д объектом, то коллайдер объекта может перекрывать коллайдер кнопки интерфейса для курсора, и функции OnMouseOver, как с этим бороться не применяя стандартные средства UI? (2D коллайдеры подошли бы хорошо, но я незнаю как будут вести себя они, если повернуть камеру вниз, ведь коллайдер плоский?)
3) Почему UI Canvas настолько огромная? Как вы с этим боретесь? (при Canvas, Render Mode: Screen Space Overlay) очень неудобно редактировать что-либо на таком огромном окне, а потом пытаться найти маленькое пятно, где находится весь игровой уровень и судорожно кликать на какой-то из этих объектов, чтобы приблизить потом с помощью кнопки F)
4) Можно ли отобразить 3д объект используя на Canvas, Render Mode: Screen Space Overlay? А то у меня 3д объект куда-то теряется в таком режиме.
Добавлено (25 Января 2018, 05:53) --------------------------------------------- Короче забил я на юнитовский UI и на Canvas, добавил просто вторую камеру, и убрались все проблемы, которые были вызваны тем что интерфейс находится на одной камере с игрой. Теперь можно делать Zoom какой хочешь, накладывать куча эффектов в игру и они не будут с HUD перекликаться, а также можно камеру крутить под любым углом... Давно надо было так сделать, просто думал две камеры много жрут ресурсов, а еще думал, что из-за этого работы и сложностей будет много, но оказывается не столько сложностей, сколько вызвал юнити UI и Canvas. Также не пришлось много кода менять, всего несколько строк. И не нужно изучать дополнительный материал, связанный с UI, а также подводными камнями.
Сообщение отредактировал alexsilent - Четверг, 25 Января 2018, 05:59
Разбираюсь с си шарпом дальше и появились новые проблемы с C#, нет встроенного Array. Но я вроде бы это исправил, только не знаю насколько оптимизированно это, и есть ли лучше способ, без Array я не могу жить, очень много нужно динамически массив туда сюда перегонять для разных целей, и в яваскрипт с этим было намного лучше. Тут код симулирующий юнитискрипт Array, жаль что я не программист, а то бы наверное лучше вышло еще тут нет отдельно работы с Boolean и векторами, функций будет в 2 раза больше, и это меня немного пугает, стоит ли опасаться за оптимизацию :
Код
using UnityEngine; using System.Collections;
public class Array : MonoBehaviour { static Array It;
void Awake() { It = this; }
public float[] values; float[] arrayCopy; void Start() { /*foreach (float value in values) { print(value); }
print("***"); foreach (float value in values) { print(value); }*/ }
public float[] Add(float[] arrs,float word) { float[] arrayCopy = arrs; arrs = new float[arrs.Length+1]; int b = 0; for (int a = 0; a < arrayCopy.Length; a++) { arrs[b] = arrayCopy[b]; b++; } arrs[b] = word; return arrs; }
public int[] Add(int[] arrs, int word) { int[] arrayCopy = arrs; arrs = new int[arrs.Length+1]; int b = 0; for (int a = 0; a < arrayCopy.Length; a++) { arrs[b] = arrayCopy[b]; b++; } arrs[b] = word; return arrs; }
public string[] Add(string[] arrs, string word) { string[] arrayCopy = arrs; arrs = new string[arrs.Length+1]; int b = 0; for (int a = 0; a < arrayCopy.Length; a++) { arrs[b] = arrayCopy[b]; b++; } arrs[b] = word; return arrs; }
public float[] Push(float[] arrs, float word) { float[] arrayCopy = arrs; arrs = new float[arrs.Length+1]; int b = 1; for (int a = 0; a < arrayCopy.Length; a++) { arrs[b] = arrayCopy[a]; b++; } arrs[0] = word; return arrs; }
public int[] Push(int[] arrs, int word) { int[] arrayCopy = arrs; arrs = new int[arrs.Length+1]; int b = 1; for (int a = 0; a < arrayCopy.Length; a++) { arrs[b] = arrayCopy[a]; b++; } arrs[0] = word; return arrs; }
public string[] Push(string[] arrs, string word) { string[] arrayCopy = arrs; arrs = new string[arrs.Length+1]; int b = 1; for (int a = 0; a < arrayCopy.Length; a++) { arrs[b] = arrayCopy[a]; b++; } arrs[0] = word; return arrs; }
public float[] RemoveAt(float[] arrs, int num) { float[] arrayCopy = arrs; if (arrs.Length > 0) { arrs = new float[arrs.Length-1]; int b = 0; for (int a = 0; a < arrayCopy.Length; a++) { if (a != num) { arrs[b] = arrayCopy[a]; b++; } } } return arrs; }
public int[] RemoveAt(int[] arrs, int num) { int[] arrayCopy = arrs; if (arrs.Length > 0) { arrs = new int[arrs.Length-1]; int b = 0; for (int a = 0; a < arrayCopy.Length; a++) { if (a != num) { arrs[b] = arrayCopy[a]; b++; } } } return arrs; }
public string[] RemoveAt(string[] arrs, int num) { string[] arrayCopy = arrs; if (arrs.Length > 0) { arrs = new string[arrs.Length-1]; int b = 0; for (int a = 0; a < arrayCopy.Length; a++) { if (a != num) { arrs[b] = arrayCopy[a]; b++; } } } return arrs; }
}
Добавлено (12 января 2018, 18:40) --------------------------------------------- вызывать придется вот так, выглядит как костыль, но лучше не придумал:
Кажется будто тут нужно месяца 2 работы, ну или 1-2 недели, если только этим круглые сутки заниматься. Впечатляет. И пугает... D:
2) LowRes, это что-то типа такого, то есть игре придется уменьшиться в 2-3 раза, и там придется везде скорость корректировать, уменьшая в 2-3 раза, чтобы игра выглядела, как Ретро:
3) Я тоже разбиваю на куски персонажа, только анимирую прямо в Юнити, спрайтером не пользовался много, там я путаюсь и не привык, в отличии от юнити.
А нужно обязательно в спрайтере анимировать? Или любой другой способ, чтобы в конечном итоге получились кадры анимации, и примерно сколько кадров анимации, например на ходьбу, если это по кадрам?
4) Пока даже не знаю, смогу ли столько успеть. Проект выглядит очень комплексным. Это даже круто, жаль сроки поджимают)
Сообщение отредактировал alexsilent - Понедельник, 18 Декабря 2017, 13:51
Можно уточнить по заданию, какое нужно качество работ, то есть показать пример работы, на которую стоит ориентироваться, чтобы оценить фронт работы, и смогу ли уложиться во время, ибо еще есть работа в реале?!
Сообщение отредактировал alexsilent - Воскресенье, 17 Декабря 2017, 16:14
Занимательно, нравится видео) А под художника проект подстраивается? То есть к примеру, если я люблю/хочу только рисовать в LowRes пиксельарте, то есть очень маленькое разрешение в пикселях, или все-таки нужно рисовать в том разрешении которое уже есть, интересно какое это разрешение? Просто я пока не представляю , как делать такую большую анимацию без Unity3d, подозреваю что это на констракт 2 сделано, внутри юнити я делаю анимацию с любым размером спрайтов, но хотя и это тоже не быстрое дело, то есть это намного сложнее и дольше, чем в низкопиксельном разрешении. По проекту вижу огромное количество механник о_О слишком много: стратегия, платформер, шутер, похоже тут арта очень много нужно. А можно списочек чего нужно рисовать, чтобы прикинуть, смогу ли осилить, да и другие люди смогли бы оценить свои силы сразу?!
>>Чтобы стать участником конкурса, вам необходимо до 25 декабря 2017 года (включительно) внести пожертвование на сумму не менее 300 рублей, затем создать тему в разделе Игры на конкурс «Multi Genre Mix» и вступить в нашу Группу Вконтакте. Этим вы обеспечите себе Право на участие.
Ого, первый раз вижу такой конкурс, где надо платить за участие. Сумма конечно символическая, но удивило)
Сообщение отредактировал alexsilent - Воскресенье, 17 Декабря 2017, 16:25
Ищу способы сделать простую программу для пиксельарта, подумал тут же есть какой-то непонятный Image Manipulator, можно ли с ним сделать что-то, чтобы можно было рисовать пиксели? Или у ней другая функция?
Ну тут скрин, как в JRPG, в отличии от RPG, там нет ничего от ролевой игры, кроме прокачки, и то часто мы даже не можем распределить сами параметры (но не всегда, но часто). Сюжет линеен в основном, так что можно не заморачиваться, просто сделать прокачку (или она уже сделана), лепить врагов, неписей, вещи, скучные линейные сайд квесты (а можно их вообще не делать, это же JRPG), и обязательно сделать сюжет про глобальную катастрофу, ну там глобальная война, или демон всем угрожает по старинке делать один и тот же сюжет, и как обычно храбрый герой всех спасет... и вот и готова игра)
Я даже не рассчитываю на другой проект. Хотя было бы круто увидеть либо высмеивание канонов РПГ (JRPG), либо сделать чтобы главный герой был бы трусом (а да тут же классы есть (скорее всего они все связаны с тем как герой будет драться, а не взаимодействовать с окружающей средой, все взаимодействие это обычно - драка), нужно же обязательно систему боя влепить, и почему во всех ролевых играх всего одна профессия - БОЕЦ? даже если ты маг, торговец, алхимик или бард, все равно убьешь столько монстров, что кроме как массовый уничтожитель, по другому героя не назвать, не будет у него другой роли, как ни крути)...
Добавлено (03 декабря 2017, 00:59) --------------------------------------------- Cамое главное в ролевых играх, это отыгрышь роли, а не какие-то параметры, которые надо прокачивать, я вообще хотел бы посмотреть на ролевую игру, где вообще нельзя качать параметры и они статические при выборе перса, а все взаимодействие происходит через отыгрышь роли, то есть убрать то, что ошибочно считают главным в ролевой игре, ибо прокачка это вообще не должно быть связано с ролевой игрой, по логике название RPG должно быть заменено на название PEG (Pumping Experience Game, то есть игра, где ты качаешь экспириенс, при чем тут ролевая игра, я не понимаю)) ).
Сообщение отредактировал alexsilent - Воскресенье, 03 Декабря 2017, 01:01
С одной стороны репутация не очень будет, с другой стороны бывают вполне успешные игры типа Hunie Pop, и ее репутация крайне положительная, то есть всегда можно сделать из минуса в плюс, просто сделать это не кривыми граблями.
Добавлено (02 декабря 2017, 05:07) ---------------------------------------------
ЦитатаOrdan ()
На патреоне скоро будет чистка откровенно нарушающие законы, будут удалены проекты распространяющие педофилию, инцесты, зоффилию и тд
Один из самых успешных проектов на патреоне собирал в лучшие месяцы по 30 000$, Breeding Seasons, сейчас разработчик другой делает проект, я думаю, реально ли патреон захочет избавиться от этого?
Добавлено (02 декабря 2017, 05:15) --------------------------------------------- Но главная суть в том, что не обязательно эротика и игры для взрослых принесут успех, потенциальных проблем будет точно больше, как например снижение репутации, а успех можно получить за совершенно другие игры, и шансы на успех ничуть не больше, они все такие же маленькие.
Сообщение отредактировал alexsilent - Суббота, 02 Декабря 2017, 05:16
Добавлено (17 ноября 2017, 00:07) --------------------------------------------- только теперь вопрос, Как этим управлять? Раньше я вот так тырил компонент, а теперь так не будет работать и там нужно будет через всякую си шарповскую ерундистику входить? Я то сишарп до сих пор не понимаю Сейчас будем проверять, работает ли старая добрая GetComponent на эту непонятную приблуду.
Код
var comp2 : UnityStandardAssets.ImageEffects.Fisheye; ... comp = GetComponent(UnityStandardAssets.ImageEffects.Fisheye);
Сообщение отредактировал alexsilent - Пятница, 17 Ноября 2017, 00:10
Я просто хотел добавить к камере пару пост-процессов, взял ассет, а там теперь только ридми лежит:
Цитата
The old image effects have been deprecated and moved to the Asset Store: https://www.assetstore.unity3d.com/#!/content/83913
We recommend that you now use the new post-processing stack. You'll find it at https://www.unity3d.com/postprocessing
Ну пошел я по ссылке, скачал рекомендуемые компоненты, и я не вижу удобного интерфейса, как раньше, чтобы в один клик привязать пост-процесс к камере, а на перетягивание компонента вручную на камеру он ругается. "the script needs to derive from monobehaviour " Зачем мне тогда вообще нужны новые пост-процессы, если с ними столько мороки...
В старых пост-процессах вот так было, выбираешь Image Effects из поведений, и выбираешь что тебе нужно:
А в новом, только эта ерунда, которая непонятно как работает:
Что делать?
Сообщение отредактировал alexsilent - Четверг, 16 Ноября 2017, 23:32
Поэтому вместо того чтобы думать категориями конечных объектов я думаю категорией информации. Я создаю класс который хранит например все вращения и положения для объекта. И уже и декораторФлоат и любой другой класс обращаются к этому классу содержащие только переменные.
pixeye, это описание мне очень нравится, у меня иногда цепочка увеличивается до 4-х пунктов, скрипт в скрипте скрипта) надо бы погуглить, как с этим работать, для чайников, как это по английски понятие называется, чтобы гуглилось легко?!
PS В принципе, попробую просто погуглить на Add Behaviour
Сообщение отредактировал alexsilent - Четверг, 09 Ноября 2017, 21:24
PS еще мне не хватает "частичного сворачивателя" в юнити, например у меня есть скрипт, где описаны все предметы, которые можно подобрать, чтоб загружать например в инвентарь с абсолютно любой локации. Пока их около 35 предметов, но когда количество вырастет до 100, то юнити начинает слегка притормаживать (тестировал уже), была бы возможность скрывать некоторую часть этого массива, чтобы не все 100 были одновременно на виду, было бы круто. Но это так, мечты)
Добавлено (09 ноября 2017, 21:03) ---------------------------------------------
Причина кроется в том, что я использую всего один monobehaviour на объекте для его логики. Связано с тем что используя кучу несвязных monobehaviour на префабе ты в них быстро начинаешь путаться и забываешь откуда ноги растут. Это просто из личного опыта.
Это я понимаю, у меня тоже немало скриптов на каждом префабе, правда до 12-ти вроде еще ни разу не доходило. Но иногда неудобно. Хотя если это все будет в одном модуле, то свернуть только часть не получится, иногда удобно ненужную часть свернуть, и оставить только нужный скрипт. А если все будет в одном, то оно всегда будет развернуто?
Сообщение отредактировал alexsilent - Четверг, 09 Ноября 2017, 20:46
alexsilent, честно говоря, код пиксая без серьёзных знаний C# вообще будет очень трудно понять.
InsaneSystems, наверное в этом вся соль. Если бы мне нужно было бы поведение пушки, то я бы просто сделал поведение пушки и вешал на любые бы объекты. Например корабль, у него же есть объект пушки, вот туда бы и повесил, лишним скриптом бы тут был бы для меня Хранилище поведений, если бы я только не захотел бы получить доступ из другого скрипта, но я бы просто бы другим скриптом через GetComponent бы применил и оттуда бы воровал переменные или бы вмешивался в работу.
Сообщение отредактировал alexsilent - Четверг, 09 Ноября 2017, 20:33
pixeye, спасибо! Кое-что прояснилось, но кое-что немножко непонятно.
Например:
Цитатаpixeye ()
Я описываю логику модулями и храню переменные группами по смыслу, а не по объекту. Единожды описав поведение вращения пушки например я это потом могу использовать для любой пушки в игре.
Я тоже например вот этот скрипт сделал для того, чтобы использовать на любом объекте, которому нужно постоянное вращение или движение, не только к одному единственному, а вообще к любому к какому захочу, и этот код не разделен на два кода, в чем смысл разделять на две части? Есть какой-нибудь простой урок для чайников? (То есть другими словами, как это понятие называется, я погуглю) а то выглядит очень сложно для меня, т.е. зачем их разделять на два скрипта, когда можно было бы функции в одном скрипте все написать? Наверное в этом есть какой-то глубокий смысл, который я упускаю, и который наверное очень пригодится при переходе на СиШарп.
Код
#pragma strict var alwaysTurns : Vector3 = Vector3.zero; var alwaysMove : Vector3 = Vector3.zero;
private var myTransform : Transform; private var rotateDir : int = 1; var rotateDirON : boolean;
function Start () { myTransform = transform; if (rotateDirON) rotateDir=Mathf.Sign(myTransform.localScale.x); }
function FixedUpdate () { if (alwaysTurns != Vector3.zero) { myTransform.Rotate(alwaysTurns*rotateDir); } if (alwaysMove != Vector3.zero) { transform.Translate(alwaysMove, Space.World); } }
Добавлено (09 ноября 2017, 20:13) --------------------------------------------- PS Графика классная :3
Сообщение отредактировал alexsilent - Четверг, 09 Ноября 2017, 20:16
если ты пишешь на яваскриптах то без проблем сможешь писать на C# скрипты. Даже удивишься насколько синтаксис C# чище и выразительнее в сравнении с яваскриптом.
pixeye, единственное, что мне пока нравится в Сишарпе, что можно в функции добавлять значения по умолчанию у переменных типа:
Код
void MyFunction(integer number = 3)
если я правильно написал это, я пока не знаком с синтаксисом C# ^_^'
А в остальном там больше текста писать придется, короткие скрипты типа:
Код
transform.position.x += .5;
похоже невозможно написать на C#, там вроде нужно полностью вектор писать, еще и всегда добавляя лишнее слово new перед вектором(( (не люблю, лишнюю писанину, придется привыкать)
наверное на СиШарпе эта строка должна выглядеть примерно так:
Код
transform.position = transform.position + new Vector3(0.5f,0,0);
(если сократить нельзя, то это меня это действительно пугает, и надеюсь я правильно это написал)
Да и еще, чтобы скрипту название поменять, придется еще и в коде всегда дублировать, название изменять, короче больше лишней работы, которой и так будет не мало. (придется весь код переписывать с ЯваСкрипта постепенно)
Ну ладно, надеюсь там еще есть плюсы
(лично для меня, как не программиста, то есть я поверхностно использую язык, чтобы сделать игру, не углубляясь далеко в дебри ООП)
в СиШарпе, помимо единственного, о котором я пока знаю.
Сообщение отредактировал alexsilent - Четверг, 09 Ноября 2017, 19:21