Результаты поиска
| |
mrFrankenstein | Дата: Пятница, 03 Июня 2022, 11:29 | Сообщение # 1 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| Цитата Storm54 ( ) Если станет слишком много вызовов отрисовки (draw calls), то можно в несколько строчек эти меши объединить
именно это из-за этого я всем этим и занялся. Спасибо за подсказку, сейчас сяду пробовать)
Цитата drcrack ( ) Ты почти изобрел frustum culling
это было бы второй моей целью, т.к. базовый рендерит всё что перед камерой, а не только то, что видно. А поскольку у меня под 2000 базовых обьектов (это только основные) то и вызовов отрисовки какое-то неймоверное количество, особенно если зайти в край уровня и посмотреть назад... Сейчас с комбайном попробю и, если что, вернусь)Добавлено (06 Июня 2022, 14:00) --------------------------------------------- так... Я попробовал комбинировать меши и всё получилось отлично и батчей стало намного меньше (спасибо друзья), но... У меня имеется целая куча одинаковых квадратиков для пола и потолка, меши которых комбинируются в первую очередь и с ними есть некоторая проблема. https://imgur.com/EdmVkAi Их меши тупо приклеиваются друг к другу (как с лева), из-за чего остается неимоверное количество треугольников, которые просто не нужны. Есть ли какой-нибудь способ пересчитать скомбинированный меш так, чтобы убрать лишнее? Добавлено (06 Июня 2022, 15:14) --------------------------------------------- Как я понял, CombineMeshes берёт объекты и перекладывает их матрицы в массив, а потом по массиву лепит это всё друг к другу. И я подумал, что наверное можно попробовать проверить матрицы на точки , которые есть у нескольких объектов сразу и избавится от них (если это возможно). https://imgur.com/V58gnHr
Проблема только в том, что я хз как обращаться с матрицами и никогда их даже не трогал, а инфы которая всё это разжевывает я не могу найти:( Кто-нибудь может знает где смотреть? Добавлено (16 Июля 2022, 14:28) --------------------------------------------- Прошлые разы мне тут очень помогали, может и сейчс помогут) Мне надо в один контейнер упаковать (или сделать что-нибудь близкое к этому) переменные типа булеан, флоат, стринг и вектор3, а потом запихнуть этот контейнер в список, чтобы можно было легко перебирать эти контейнеры и менять их при необходимости. При чём количество таких контейнеров не известно. вот. если можете сказать что почитать по этому поводу- буду очень признателен, ато я даже не знаю с чего подступится...
|
|
| |
mrFrankenstein | Дата: Вторник, 31 Мая 2022, 19:02 | Сообщение # 2 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| Цитата drcrack ( ) Обнови Unity и URP
Даже как-то стыдно за себя стало... Спасибо)Добавлено (02 Июня 2022, 14:09) --------------------------------------------- Я тут глупость одну придумал и вот совета у вас хочу спросить.
Мой уровень строится при старте сцены, и оптимизировать его мне практически нечем (или я просто плохо учился). И я подумал "А не могу ли я использовать тут хаб для статичных объектов?" Ну тоесть уровень строится, расставляются декорации и свет, строится навмеш, а потом всё заменяется на не реагирующие со светом примитивы (кубы или шары), сохраняющие местоположение, размер и название объекта. На каждый такой примитив вешается скрипт, который по функции "OnBecameVisible" меняет примитив на нужный объект из хаба, а когда тот "OnBecameInvisible"- всё меняется обратно.
Вроде всё просто, а всё ровно кажется, что херня какая-то получится... Что скажете на это?
|
|
| |
mrFrankenstein | Дата: Воскресенье, 29 Мая 2022, 23:29 | Сообщение # 3 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| Цитата drcrack ( ) В чем проблема-то, в том что теней нет? Включи или запеки) И ещё про это. https://imgur.com/XRXQNkq
Тама вот написано "Realtime shadows for point lights are not supported. Either disable shadows or set the light mode to Baked." что в переводе на наш означает "Тени в реальном времени для точечных источников света не поддерживаются. Либо отключите тени, либо установите режим освещения на Запеченный." если верить переводчику.
Вот чего хочу спрсить: А как, собсно тени-то включить? в статье аткого ничего не нашёл, или просто не туда смотрю. Я хз в общем( Версия Unity 2020.3.31f1 (64-bit)
Сообщение отредактировал mrFrankenstein - Воскресенье, 29 Мая 2022, 23:33 |
|
| |
mrFrankenstein | Дата: Пятница, 27 Мая 2022, 13:03 | Сообщение # 4 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| Цитата drcrack ( ) И я не совсем понял логики, если ты считаешь, что их нет, почему тебя удивляет их отсутствие на скриншоте? Тут хз... Но я почему-то уверен, что есть способ без теней не освещать объект, который находится за другим объектом.
Цитата drcrack ( ) Когда-то давно не было (кроме одного directional с тенями), сейчас есть для всего https://docs.unity3d.com/Package....RP.html От за это спасибо! За это прям до земли поклон)
|
|
| |
mrFrankenstein | Дата: Четверг, 26 Мая 2022, 15:27 | Сообщение # 5 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| Цитата drcrack ( ) В чем проблема-то, в том что теней нет? Включи или запеки) Нет, тут-то как раз всё норм. Как я понял ил не должно быть. В Universal Render Pipeline, как я понял, нет риалтаймовых теней, а запечь я не могу т.к. у меня динамически генерируемая сцена, о чём я и говорил выше. Тут проблема в другом: свет распространяется на объект, который находится за коллайдером. Тут я выкрутил яркость, чтобы было нагляднее. https://imgur.com/a/CQrmE0q
|
|
| |
mrFrankenstein | Дата: Среда, 25 Мая 2022, 13:25 | Сообщение # 6 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| Цитата seaman ( ) На CGpersia есть такой пак: Спасибо)
Добавлено (25 Мая 2022, 13:33) --------------------------------------------- https://imgur.com/a/xv3Vnx8
Может кто знает как исправить подобное? поставил Universal Render Pipeline и даже не знаю куда теперь ткнутся...
Сообщение отредактировал mrFrankenstein - Среда, 25 Мая 2022, 13:35 |
|
| |
mrFrankenstein | Дата: Четверг, 14 Апреля 2022, 18:46 | Сообщение # 7 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| Цитата Spring ( ) написать свою или купить стороннюю Occlusion Culling. GDOC Спасибо, этот реддит я тоже читал. GDOC работает чересчур медленно, хотя и хорошо.Если бы я его купил- был бы очень недоволен. Хорошо, что попробовал так. Йо хо хо:) А ещё я нашёл такую штуку:Frustum Culling. Найти её нельзя, а купить уже не получается(( Если кто-то знает что-нибудь подобной- дайте знать пожалуйста
|
|
| |
mrFrankenstein | Дата: Вторник, 05 Апреля 2022, 23:05 | Сообщение # 8 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| Цитата Spring ( ) Using occlusion culling with dynamic GameObjects Прочитал. Перечитал. Ещё перечитал. Перевёл и перечитал. Нихрена не понял как работает.Что бы я не ставил в рендере, статический или динамический обьект- всё одно. Вот фото того что получилось. ¯\_(ツ)_/¯ Помогите(
Сообщение отредактировал mrFrankenstein - Вторник, 05 Апреля 2022, 23:08 |
|
| |
mrFrankenstein | Дата: Суббота, 02 Апреля 2022, 00:25 | Сообщение # 9 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| Есть вопрос, но он наверное немного не по теме. У меня динамически генерируемая сцена, собирается она как мозаика в самом старте сцены из готовых префабов. И вот по этому у меня проблемы с оклюжином (Occlusion Culling): запекание не сделаешь, т.к. на самой сцене есть только один начальный префаб, а как с динамикой работать я не нашёл( Подскажите как можно выйти из этой ситуации, ато я ума не приложу(
|
|
| |
mrFrankenstein | Дата: Среда, 13 Мая 2020, 18:32 | Сообщение # 10 | Тема: Защита от пересечения генерируемых объектов |
частый гость
Сейчас нет на сайте
| Да вот нет, мне кажется, что как раз обойдешься. И Physics.OverlapBox, возможно, как раз то, что я ищу. Заранее спасибо)
Сейчас код выглядит так
Код using System.Collections; using System.Collections.Generic; using UnityEngine;
public class CaveCreator : MonoBehaviour { public GameObject[] caveSpavnPoint; //хранилище найденых точек установки частей пещеры public GameObject[] spawnObjects; //устанавливаемые обьекты public GameObject[] spawnedObj; //установленные обьекты public int caveLong; // задаём длинну пещеры
private int I=0; //счётчик длинны пещеры private GameObject Instantiat; //надо подумать как без этого public Bounds b; //попробуем с бондами избавится от пересечения
void Start() { spawnedObj= new GameObject[caveLong]; //устанавливаем длинну массива }
void Update() { if(caveLong>I) //если ещё надо ставить куски то... { caveSpavnPoint = GameObject.FindGameObjectsWithTag("CaveSpawnPoint"); //ищем все точки для спавна if(caveSpavnPoint.Length>=2) //если нашлось больше 2-х точек то... { GameObject spawn = new GameObject(); //создаём обьект для выбора рондомного кусочка spawn=caveSpavnPoint[Random.Range(0,(caveSpavnPoint.Length-1))]; //выбераем кусочек Instantiat=GameObject.Instantiate(spawnObjects[Random.Range(0,(spawnObjects.Length-1))],spawn.transform.position,spawn.transform.rotation) as GameObject; //ставим кусочек spawnedObj[I]=Instantiat; //записываем установленный кусочек в массив Destroy(spawn); //удаляем точку спавна b = new Bounds(spawnedObj[I].transform.Find("main").position, new Vector3(112, 112, 12)); //пытаюсь разобраться с бондами } else //если точек спавна мень 2-х то... { Instantiat=GameObject.Instantiate(spawnObjects[0],caveSpavnPoint[0].transform.position,caveSpavnPoint[0].transform.rotation) as GameObject; //не мудрствуя лукаво ставим кусочек spawnedObj[I]=Instantiat; //записываем установленный кусочек в массив Destroy(caveSpavnPoint[0]); //удаляем точку спавна } I++; //рибавляем 1 к счётчику } } }
Посмотрим, что из него получится)Добавлено (14 Мая 2020, 23:44) --------------------------------------------- И вот я снова тут. Это было сложно, но я что-то сделал По крайней мере оно работает и даже так, как я хотел) А вот собственно и код. Если есть замечания и предложения- бичуйте меня по чём зря! Нечего тут рассусоливать! Если говно- то и говорите что говно, но с оговорками что и как можно исправить)
Код using System.Collections; using System.Collections.Generic; using UnityEngine;
public class CaveCreator : MonoBehaviour { public Vector3 startPointPos; //запомнить стартовую позицию public Quaternion startPointRot; //и направление public int misTry; //счётчик неудачных установок
public GameObject[] caveSpavnPoint; //хранилище найденых точек установки частей пещеры public GameObject[] spawnObjects; //устанавливаемые обьекты public GameObject[] spawnRums; //обьект для выбора онончаний тонелей public GameObject[] spawnedObj; //установленные обьекты public GameObject spawn; //обьект для выбора рондомного кусочка public int caveLong; // задаём длинну пещеры
private int I=0; //счётчик длинны пещеры private GameObject Instantiat; //надо подумать как без этого bool Started; //для гизмо для инспектора. Удалить по окончании!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//чтобы не создавать новые переменные во время работы кода //создаём переменные, в кторые будут сохранятся переменные колайдёра //для проверки столкновений с другими коллайдёрами Vector3 positionOfCave; //сохраняем позицию Vector3 sizeOfCave; //и размер Quaternion rotOfCave; //и направление
void Start() { spawnedObj= new GameObject[(caveLong+10)]; //устанавливаем длинну массива Started = true; //это штука для работы гизмо в инспекторе. Удалить!!!!!!!!!!!!!!!!!!!!!!!!! startPointPos=GameObject.FindWithTag("CaveSpawnPoint").transform.position; //запоминаем стартовую позицию startPointRot=GameObject.FindWithTag("CaveSpawnPoint").transform.rotation; //и направление обьекта, из которого будет начинаться пещера }
void Update() { if(misTry>25) //если ошибок больше 25 { misTry=0; //обнуляем счётчик ошибок GameObject star = new GameObject(); //создаём новый обьект в сцене. Да, от этого все эти непонятные "New Game Objeсt". Больше не использую такую нострукцию star.transform.position=startPointPos; //задаём обьекту нужную позицию star.transform.rotation=startPointRot; //и напавление star.tag = "CaveSpawnPoint"; //и нужный таг тоже
for(int i=0; i<spawnedObj.Length-1; i++) //циклом удаляем все уже созданные обьекты { Destroy(spawnedObj[i]); }
spawnedObj= new GameObject[caveLong+10]; //обуляем массив созданных обьектов чтоб наверняка I=0; //ну и обнуляем счётчик длинны пещеры } else //если ошибок не больше 25, то { caveSpavnPoint = GameObject.FindGameObjectsWithTag("CaveSpawnPoint"); //ищем все точки для спавна if(caveSpavnPoint.Length >0) //если ещё надо ставить куски то... { spawn=caveSpavnPoint[Random.Range(0,(caveSpavnPoint.Length-1))]; //берём случайный кусочек
if(caveSpavnPoint.Length +I <= caveLong) //если не достаточно проходов и не нужно ставить комнаты { Instantiat=GameObject.Instantiate(spawnObjects[Random.Range(0,spawnObjects.Length)],spawn.transform.position,spawn.transform.rotation) as GameObject; //ставим кусочек } else //если достаточно проходов и нужно ставить комнаты { Instantiat=GameObject.Instantiate(spawnRums[Random.Range(0,spawnRums.Length)],spawn.transform.position,spawn.transform.rotation) as GameObject; //ставим комнаты } spawnedObj[I]=Instantiat; //записываем установленный кусочек в массив string nam=I.ToString(); //переводим цифры в буквы spawnedObj[I].name=nam ; //переименовываем установленный кусочек в номер positionOfCave=spawnedObj[I].transform.Find("box").transform.position; //из только что установленного кусочка выдераем обьект, который размерами как комната, только это простой квадрат sizeOfCave=spawnedObj[I].transform.Find("box").GetComponent<Collider>().bounds.size; //выдераем из квадрата его размер в мировых кординатах rotOfCave=spawnedObj[I].transform.rotation; //и направление
spawnedObj[I].SetActive(false); //основной же обьект скрываем на время проверки Collider[] colliders = Physics.OverlapBox(positionOfCave, sizeOfCave, rotOfCave); //собственно, делаем проверку
if(colliders.Length>=1) //если проверка показала, что мы чего-то касаемся, то... { misTry++; //+1 в ошибки Destroy(spawnedObj[I]); //удаляем установленный обьект } else //если проверка показала, что мы ничего не касаемся, то... { misTry=0; //обнуляем счётчик ошибок spawnedObj[I].SetActive(true); //включаем наш главный обьект Destroy(spawnedObj[I].transform.Find("box").gameObject); //удаляем уже ненужный квадрат Destroy(spawn); //удаляем точку спавна I++; //прибавляем 1 к счётчику } } } }
void OnDrawGizmos() //эта штака нужна только для гизмо в инспекторе. Удалить!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! { Gizmos.color = Color.red; if (Started) Gizmos.DrawWireCube(positionOfCave, sizeOfCave); } }
Сообщение отредактировал mrFrankenstein - Среда, 13 Мая 2020, 18:33 |
|
| |
mrFrankenstein | Дата: Воскресенье, 10 Мая 2020, 22:49 | Сообщение # 11 | Тема: Защита от пересечения генерируемых объектов |
частый гость
Сейчас нет на сайте
| На сцене перед началом игры случайно генерируются части уровня, всячески поворачивая и закручиваясь. Иногда они закручиваются сами в себя, а иногда большой кусок ставится в маленькой пространство. вот как-то так получается http://s1.uploadpics.ru/images/-yyDLbFjpB.png Надо как-то придумать проверку для того, чтобы знать когда можно ставить кусочки а когда нельзя, а я не могу придумать( Помогите
Добавлено (12 Мая 2020, 18:24) --------------------------------------------- Короче. Рас уж никто мне не может помочь, то буду делать сам и пусть вам, дорогие друзья, будет стыдно На данный момент придумал я такую штуку: перед установкой нужного объекта на своё место на это место ставится примитив (куб) который ещё и триггер. Триггер меняет размеры примерно имитируя размеры возможных комнат, а результаты пишутся в массив. Если такой-то размер задевает другие объекты, то комнату такого-то размера суда ставить нельзя. Осталось только придумать, как в нулевой промежуток времени (между строчками кода) проверить касается ли триггера что-нибудь или нет, т.к. OnTriggerStay-Enter работают не так, да и вдобавок енто в дугом скрипте делается, а я так не хочу. Короче, пойду искать инфу. Вернусь завтра ну, или когда там получится)
Сообщение отредактировал mrFrankenstein - Вторник, 12 Мая 2020, 18:27 |
|
| |
mrFrankenstein | Дата: Воскресенье, 30 Октября 2016, 15:56 | Сообщение # 12 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| Цитата EchoIT ( ) EchoIT Ааа... простите, не понял сразу)
|
|
| |
mrFrankenstein | Дата: Воскресенье, 30 Октября 2016, 14:39 | Сообщение # 13 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| Цитата Ranger ( ) сделай 1 неуничтожаемый синглтон объект, который управляет ресурсами. к нему и обращайся. Это сложно, учитывая, что должно быть больше 10-ка сцен. Да и делать так- не универсально, а значит не применимо к моей ситуации... Тавтология получилась...
Цитата EchoIT ( ) EchoIT Почему вы думаете, что при большом количестве сцен будут ошибки? Если соблюдать иерархию ресурсов- всё будет в порядке, мне кажеться...
Вот меня какая идея посетила только что: Что если, не нужно будет менять сцены, что если можно будет добавлять на сцену огромные префабы с территорией (Вместе со всеми объектами на ней). Сделать какую-нибудь буферную локацию, типа лифта или пещеры с коридором, и через триггер добавлять новую территорию и удалять старую? Как думаете, стоит за это браться?
Сообщение отредактировал mrFrankenstein - Воскресенье, 30 Октября 2016, 14:43 |
|
| |
mrFrankenstein | Дата: Суббота, 29 Октября 2016, 04:42 | Сообщение # 14 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| Цитата EchoIT ( ) действительно удобнее. Это более чем верно, НО (!) не в этом случае. Я знаю как перетаскивать в инспектор нужный файл, но мне надо чтобы этот файл читался на прямую из памяти. Во первых: по тому, что (мне кажется) иметь на сцене добрый десяток скрытых объектов - не самая лучшая идея (имеется в виду модели оружия в которых будут вспышки-стрижки-шишки и ещё Бог знает что). Особенно это не удобно, когда переходишь с одной сцены на другую. Все префабы (кроме статичных конечно) нужно обратно перешерстить и проверить всё ли правильно работает, и работает ли вообще...
Во вторых: мне кажется, что эта функция ( Resources.Load(), если это то что нужно ) мне в будущем понадобиться. Если вы сможете объяснить или хотя бы подсказать где посмотреть (желательно на русском) про это, я буду очень благодарен))) И кстати, может быть вы знаете, где можно посмотреть информацию по оптимизации (желательно на русском. Можно и на Енглише если есть, но на Русском предпочтительнее)?
Сообщение отредактировал mrFrankenstein - Суббота, 29 Октября 2016, 04:44 |
|
| |
mrFrankenstein | Дата: Пятница, 28 Октября 2016, 07:45 | Сообщение # 15 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| Цитата dimaantipanov ( ) перенести и выставить координаты не получиться? Должен появляться префаб с искрами при каждом выстреле. Как вы думаете, как часто я смогу переносить и выставлять его "руками"? Это нужно делать это через скрипт, правильно думаете.
|
|
| |
mrFrankenstein | Дата: Четверг, 27 Октября 2016, 21:01 | Сообщение # 16 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| Приветствую вас! Подскажите пожалуйста, каким образом можно осуществить Инстанцировать (Instantiate) префаб на определённые координаторы напрямую из папки Assets. Это вообще возможно? Буду очень рад каждому совету)
|
|
| |
mrFrankenstein | Дата: Среда, 07 Сентября 2016, 19:51 | Сообщение # 17 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| Спасибо!)))
Сообщение отредактировал mrFrankenstein - Среда, 07 Сентября 2016, 19:51 |
|
| |
mrFrankenstein | Дата: Среда, 07 Сентября 2016, 19:21 | Сообщение # 18 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| Простите меня, я неправильно выразился. Не анимированный спрайт, а анимированный UI)
|
|
| |
mrFrankenstein | Дата: Среда, 07 Сентября 2016, 18:35 | Сообщение # 19 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| Я просто не знаю ничего об этом, ни о падении производительности, ни о конвертерах. Я новичок в о всём, что касается Unity3d, так что не ругайтесь) Лучше скажите, что значит "разложение в атлас со всеми настройками"?Добавлено (07 сентября 2016, 18:35) --------------------------------------------- Или ещё лучше, подскажите как сделать анимированный спрайт, без потери производительности)
|
|
| |
mrFrankenstein | Дата: Среда, 07 Сентября 2016, 01:23 | Сообщение # 20 | Тема: Вопрос-[ответ] по Unity |
частый гость
Сейчас нет на сайте
| Скажите, как добавить Gif в UI так, чтобы она продолжила воспроизводиться?
|
|
| |
|