Вторник, 23 Апреля 2024, 09:03

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Форум игроделов » Записи участника » defGMDefeloper [51]
Результаты поиска
defGMDefeloperДата: Понедельник, 22 Января 2018, 19:26 | Сообщение # 41 | Тема: Массовое создание объектов C#
частый гость
Сейчас нет на сайте
Нз.Удачи в создании игры =)
defGMDefeloperДата: Понедельник, 22 Января 2018, 19:03 | Сообщение # 42 | Тема: Массовое создание объектов C#
частый гость
Сейчас нет на сайте
В Start он зацикленый
defGMDefeloperДата: Понедельник, 22 Января 2018, 18:29 | Сообщение # 43 | Тема: Массовое создание объектов C#
частый гость
Сейчас нет на сайте
ну для начала.Рыб перебирать не обязательно.
Создал fishCount++;
Поймал или ещё че с ней стало fishCount--;
Tranform[] FishSpawnPos;//Массив с координатами рыбы
Корутин
IENumerator FishSpawn()
{
while(true)
{
yield return new WaitForSecond(1f);//Будем проверять нужна ли новая рыба раз в 1 секунду.
if(fishCount<5)
{
//создаешь рыбу
fishCount++;
}
}
}
defGMDefeloperДата: Понедельник, 22 Января 2018, 18:01 | Сообщение # 44 | Тема: Массовое создание объектов C#
частый гость
Сейчас нет на сайте
ну мб костыль ,но такой вариант
public class FishTransform{
public Transform point;
public bool isSpawnedHere=false;
}

while(true)
{
if(!FishTransforms[randomTrans].isSpawnedHere)
{
fish = Instantiate(fishPrefab, FishTransforms[randomTrans].point.position, Quaternion.identity) as GameObject;
FishTransforms[randomTrans].isSpawnedHere = true;
break;
}
}

p.S у тя 3 точки спавна и как понял 5 рыб.Если рыбы у тя не отплывают от точки спавна тогд все предельно ясно.
1.Сделать больше точек спавна
2.Делать через корутин и ждать пока рыба отплывет -потом спавнить новую


Сообщение отредактировал defGMDefeloper - Понедельник, 22 Января 2018, 18:08
defGMDefeloperДата: Понедельник, 22 Января 2018, 17:49 | Сообщение # 45 | Тема: Проблема с List C#
частый гость
Сейчас нет на сайте
ну добавляй в list не холсты,а вот эти синие и оранжевые UI-шки,и выключай компонент ,к примеру Image,тогда он не будет отображаться

Добавлено (22 Января 2018, 17:45)
---------------------------------------------
Ещё можно создать 2 камеры и переключать между ними,одна камера рендерит только синий канвас,другая только оранжевый.способов вообще много

Добавлено (22 Января 2018, 17:49)
---------------------------------------------
А конкретней можно?Что ты хочешь получить в конечном результате?Или это ты прост учишся


Сообщение отредактировал defGMDefeloper - Понедельник, 22 Января 2018, 17:49
defGMDefeloperДата: Понедельник, 22 Января 2018, 17:16 | Сообщение # 46 | Тема: Проблема с List C#
частый гость
Сейчас нет на сайте
Зачем 2 холста?сделай 1 и повесь на него синий и оранжевый UI
в лист записывай не канвас ,а игровой обьект(куб).Ну хотя смотри как лучше.

Цитата
По необходимости я уничтожаю любой из этих объектов

Это где ты его удаляешь?
Вот там где удаляешь пишешь
constractUI.Remove(cube)
Destroy(cube)

А вообще объясни зачем это все?


Сообщение отредактировал defGMDefeloper - Понедельник, 22 Января 2018, 17:17
defGMDefeloperДата: Пятница, 19 Января 2018, 19:56 | Сообщение # 47 | Тема: Множество объектов
частый гость
Сейчас нет на сайте
LateUpdate я вообще не использую.
Цитата defGMDefeloper ()
Перетащил все в 1 скрипт.

Все "звезды" находятся в 1 скрипте
defGMDefeloperДата: Пятница, 19 Января 2018, 19:03 | Сообщение # 48 | Тема: Множество объектов
частый гость
Сейчас нет на сайте
Перетащил все в 1 скрипт.Фпс больше не стал(.Видимо надо делать внутри корутина алгоритмы чтобы отсеивать все ненужные звезды и посмотреть ещё что такое паралельные циклы

например ,чем ближе камера к точке обзора(цели)
тем меньше радиус на котором звезды "активны"
по сути чем она ниже опускается тем меньше смысла отрисовывать звезды которые заслоняют друг друга.И выглядит не очень и нагрузка лишняя.Короче мороки много =(

Добавлено (19 Января 2018, 19:03)
---------------------------------------------
И кстати.Как сделать проверку что элемент UI в области экрана?
Пробовал Rect.Contains - не вышло(.хотя мб вообще не стоит делать такую проверку(идеи чет закончились(

Сообщение отредактировал defGMDefeloper - Пятница, 19 Января 2018, 17:53
defGMDefeloperДата: Пятница, 19 Января 2018, 15:09 | Сообщение # 49 | Тема: Множество объектов
частый гость
Сейчас нет на сайте
Код
IEnumerator _StarDraw(float maxDist_MKG, float maxDist_AFB2, float maxDist_OB1)
    {
        while (true)
        {
            float[] maxDist_ = {maxDist_OB1,maxDist_OB1,maxDist_AFB2,maxDist_AFB2,maxDist_AFB2,maxDist_MKG,maxDist_MKG,maxDist_MKG};
            float d = Vector3.Distance(lookAt, camP.position);
            for (int i = 0; i < stars.Length; i++)
            {
     
                if (d > maxDist_[i])
                {
                    if (StarLayers[i])
                        StarLayers[i] = false;
                   
                }
                else
                {   
                    if (!StarLayers[i])
                        StarLayers[i] = true;
                    if(i==0) continue;
                    Material mK = stars[i].img_.material;
                    Color tc = mK.GetColor("_TintColor");
                    float k = 0.5f*(0.9f - (d / maxDist_[i]*d / maxDist_[i]));
                    mK.SetColor("_TintColor",new Vector4(tc.r,tc.g,tc.b,k));         
                }
            }
            yield return new WaitForFixedUpdate();
        }
    }


Не,конечно нет) Это вызывается в корутине ,и только для целых массивов звезд,разбитых по размеру.А проверка на дистанцию проходит только если Layer==true.Но за идею спасибо.Чутка переделать.Сделать все в 1 скрипте.
stars.Length - массив из 8 звезд(типов) это клас хранящий префаб,для создания и Image(UI).
Если менять материал префаба,меняет материал на всех обьектах.

Добавлено (19 Января 2018, 15:09)
---------------------------------------------
А World Space не подходит.Звезды то 2д картинки,но камера двигается в трехмерном пространстве.
Canvas.LookAt(camera) плохо.ибо повернуть холст с 10к дочерних обьектов..
звезда[1-10к].LookAt(camera) ничем не лучше варианта с преобразованием координат,только там я знаю точные координаты ,а в World Space координаты масштабируются в месте с холстом и короч не очень удобно

Сообщение отредактировал defGMDefeloper - Пятница, 19 Января 2018, 15:06
defGMDefeloperДата: Пятница, 19 Января 2018, 13:43 | Сообщение # 50 | Тема: Множество объектов
частый гость
Сейчас нет на сайте
Цитата GMassta ()
Для начала убери в постоянно обновляемых методах создание новых элементов типа:
new Vector3(v.x, v.y, 0)

Это необходимый минимум. если на Jave,я его не использую,не могу быть уверен,пишется так

transform.position.x+= значение,то это лишь упрощение.На самом деле он также создает новый тип,Vector3 ,просто он это делает за вас.

Vector3 v = Camera.main.WorldToScreenPoint(star_.position);
t_.position = new Vector3(v.x, v.y, 0);
А то что я создал вектор v,если не ошибаюсь для компилятора это не особо важно,ведь я не создал новый тип.
А что на счет Camera.main.WorldToScreenPoint(star_.position); - без этого ниче работать не будет.Метод создает проекцию координат из трехмерного пространства на двухмерное(экранное),т.к все "звезды" - это картинки,спрайты.

P.S пришлось создать,ибо по какой-то причине если z у UI Image больше или равно 1000 он просто пропадает.Объяснит кто почему так происходит?я ничиго не нашел

А на счет шейдеров плиз попродробней,я не особов них смыслю.Даже не знаю с чего начать поиск.

Читал я как можно оптимизировать код,но эт не подходит все.Как по мне в коде все по минимуму,поправте если ошибаюсь.Тут нужно чет глобальное ,мб кто раньше делал что подобное и нашел более оптимальное решение,а может вообще использовал не UI. И ещё раз на счет того,что красным,если кто знает плз поясните.


Сообщение отредактировал defGMDefeloper - Пятница, 19 Января 2018, 14:10
defGMDefeloperДата: Пятница, 19 Января 2018, 00:08 | Сообщение # 51 | Тема: Множество объектов
частый гость
Сейчас нет на сайте
Создаю игру на подобии spore.
Кто играл в spore знает что там очень много звезд(100к ,если spore.wiki не врет :3).Конечно единовременно рендерится не все(но наблюдения показывает что все равно рендерится достаточно много).
На каждом обьекте есть скрипт:


На таких масштабах каждая запятая важна.Сейчас спокойно на одной сцене существует 10к звезд.Я меняю альфа канал текстуры по мере отдаления камеры от точки куда она направлена:

Код
Material mK = stars[i].img_.material;
                    Color tc = mK.GetColor("_TintColor");
                    float k = 0.5f*(0.9f - (d / maxDist_[i]*d / maxDist_[i]));
                    mK.SetColor("_TintColor",new Vector4(tc.r,tc.g,tc.b,k));  


Вот пару картинок:




Ну.и собсвенно в чем проблема .Не смотря на все усилия fps низкий при том что рендерится лишь 10 часть от желаемого .И на 3 изображение при движении камеры звезды те что относительно далеко буд-то двигаются,что выглядит не очень реалистично и красиво,хотя и с точки зрения математики все правильно).
1.Как можно повысить производительность?
2.Как убрать " движение"?


Сообщение отредактировал defGMDefeloper - Пятница, 19 Января 2018, 00:19
Форум игроделов » Записи участника » defGMDefeloper [51]
  • Страница 3 из 3
  • «
  • 1
  • 2
  • 3
Поиск:

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