Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Проекты > Постмор

Постмор Истории успешного завершения проекта. Разрабы рассказывают, как к успеху шли.

Ответ
 
Опции темы
Старый 25.03.2020, 08:58   #76
ant0N
Бывалый
 
Аватар для ant0N
 
Регистрация: 10.06.2011
Адрес: В горах
Сообщений: 791
Написано 295 полезных сообщений
(для 770 пользователей)
Ответ: I.D.S. MONSTERS

//расчёт размера сетки исходя из уровня угрозы
        if (TotalThreatLevel == 1)
        {
            SetkaScaleZ = 11;
            SetkaScaleX = 11;
        }
        if (TotalThreatLevel == 2)
        {
            SetkaScaleZ = 13;
            SetkaScaleX = 13;
        }
        if (TotalThreatLevel == 3)
        {
            SetkaScaleZ = 15;
            SetkaScaleX = 15;
        }
        if (TotalThreatLevel == 4)
        {
            SetkaScaleZ = 19;
            SetkaScaleX = 19;
        }
        if (TotalThreatLevel == 5)
        {
            SetkaScaleZ = 23;
            SetkaScaleX = 23;
        }
        if (TotalThreatLevel == 6)
        {
            SetkaScaleZ = 35;
            SetkaScaleX = 35;
        }
        if (TotalThreatLevel == 7)
        {
            SetkaScaleZ = 99;
            SetkaScaleX = 99;
        }
Почему ты не используешь switch?

public static class PlayerKarman
И почему карман статический?

PS. нэйминг у тебя шикарный
__________________
Абсолютли!
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Arton (25.03.2020)
Старый 25.03.2020, 19:25   #77
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 4,785
Написано 1,501 полезных сообщений
(для 4,868 пользователей)
Ответ: I.D.S. MONSTERS

Почему ты не используешь switch?

public static class PlayerKarman
И почему карман статический?

PS. нэйминг у тебя шикарный
Не использую по тому, что не знаю о чём речь.
Это первый мой проект за десятилетие,
Первый проект на юнити, первый на си шарп.
Я в процессе изучения, разрабатываю как могу.
Последнее что я кодил, это на хорсе под враппером
в блитц физику и пп для ртс типа старкрафта 2,
На бэйсике.

Статический для того, чтобы иметь глобальный
Скриптовый файл без привязки к объектам.
Знаю, что можно объявить команду,
Чтобы скрипт не удалялся при смене сцен, такой
Способ тоже буду юзать, но в данный момент
Мне нужно так как есть.

Нэйминг у меня всегда такой был )))
Главное, что мне всё понятно.
(Offline)
 
Ответить с цитированием
Старый 26.03.2020, 06:35   #78
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 25.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,629
Написано 5,376 полезных сообщений
(для 15,498 пользователей)
Ответ: I.D.S. MONSTERS

Сообщение от Crystal Посмотреть сообщение
Не использую по тому, что не знаю о чём речь.
https://docs.microsoft.com/ru-ru/dot...eywords/switch

Это оператор для разбора случаев разных значений одной переменной.

switch (переменая)
{
                case 
проверяемоезначение1:

                    
// Делаем дела
                    
break; // Прекращаем проверку, иначе код пойдёт дальше

                
case проверяемоезначение2:

                    
// Делаем дела
                    
break; // Прекращаем проверку

                
default:

                    
// Действия в случае, если не подошёл ни один из вариантов (аналог else)
                    
break; // Прекращаем проверку

Твой код как раз случай из учебника, когда используют switch-case

switch (TotalThreatLevel)
        {
                case 
1:

                    
SetkaScaleZ 11;
                    
SetkaScaleX 11;
                    break;

                case 
2:

                    
SetkaScaleZ 13;
                    
SetkaScaleX 13;
                    break;

                case 
3:

                    
SetkaScaleZ 15;
                    
SetkaScaleX 15;
                    break;

                case 
4:

                    
SetkaScaleZ 19;
                    
SetkaScaleX 19;
                    break;

                case 
5:

                    
SetkaScaleZ 23;
                    
SetkaScaleX 23;
                    break;

                case 
6:

                    
SetkaScaleZ 99;
                    
SetkaScaleX 99;
                    break;

        } 
В Блице, кстати, тоже он был.

Ну в принципе в программировании действует правило "Если работает, то ты уже молодец"
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо ABTOMAT за это полезное сообщение:
Arton (26.03.2020), Crystal (26.03.2020), St_AnGer (26.03.2020)
Старый 26.03.2020, 08:51   #79
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 4,785
Написано 1,501 полезных сообщений
(для 4,868 пользователей)
Ответ: I.D.S. MONSTERS

Сообщение от ABTOMAT Посмотреть сообщение
https://docs.microsoft.com/ru-ru/dot...eywords/switch

Это оператор для разбора случаев разных значений одной переменной.

switch (переменая)
{
                case 
проверяемоезначение1:

                    
// Делаем дела
                    
break; // Прекращаем проверку, иначе код пойдёт дальше

                
case проверяемоезначение2:

                    
// Делаем дела
                    
break; // Прекращаем проверку

                
default:

                    
// Действия в случае, если не подошёл ни один из вариантов (аналог else)
                    
break; // Прекращаем проверку

Твой код как раз случай из учебника, когда используют switch-case

switch (TotalThreatLevel)
        {
                case 
1:

                    
SetkaScaleZ 11;
                    
SetkaScaleX 11;
                    break;

                case 
2:

                    
SetkaScaleZ 13;
                    
SetkaScaleX 13;
                    break;

                case 
3:

                    
SetkaScaleZ 15;
                    
SetkaScaleX 15;
                    break;

                case 
4:

                    
SetkaScaleZ 19;
                    
SetkaScaleX 19;
                    break;

                case 
5:

                    
SetkaScaleZ 23;
                    
SetkaScaleX 23;
                    break;

                case 
6:

                    
SetkaScaleZ 99;
                    
SetkaScaleX 99;
                    break;

        } 
В Блице, кстати, тоже он был.

Ну в принципе в программировании действует правило "Если работает, то ты уже молодец"
Благодарю. Будем знать. Я правда себя программистом не считаю, им и не являюсь,
по этому многого не знаю. Ну как говорится, был и был в блитце )

Так посмотреть на код, та же жопа, только вид сбоку.
Этакий миницикл. Мне важно понять, в чём преимущество
над моим папуасским говнокодом? Что тут последовательно выполняется
проверка на значение, что в моём случае то же самое.
Или я что-то упускю из виду? А то все эти IF в апдейте всё равно
по очереди исполняются. Особой экономии строк тоже не вижу,
наличие break сводит её на ноль.

Наверно свитчи нужны для каких-то более сложных конструкций?
Просто пока я вижу смысл свитча в том, чтобы остановить последующую проверку,
если мы нашли уже нужное число. Однако в случае поиска среди семи значений,
это сомнительная экономия вычислительной мощности. Я думаю она нужна, для каких-то
расчётов проводящихся в огромном количестве одновременно. В моём случае это разовая
проверка в скрипте.

Но я думаю это знание мне может в будущем пригодится для каких-либо расчётов в скриптах спавнящихся монстров,
так-как монстров будет много на карте, следовательно скрипты будут часто перебирать какие-то переменные.

Добавил: вспомнил где я в блитце использовал свитчи, аш 13 лет назад!
С их помощью я разбивал игру на сцены, нужные функции запускались при определённом
значении переменной, как раз через "case", чтобы делить игру на стартовое меню, и игровой уровень.
В юнити такая нужда отпала, и я собственно благополучно забыл о данной фиче )
(Offline)
 
Ответить с цитированием
Старый 10.04.2020, 12:16   #80
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 4,785
Написано 1,501 полезных сообщений
(для 4,868 пользователей)
Ответ: I.D.S. MONSTERS

Так ребяты. Я тут некоторое время отдохнул,
думаю сами заметили, и вернулся к делу.
Два дня кодил.

Визуально изменений мало, ещё меньше в геймплее,
однако внутренне много что перетряс, что-то переделал,
что-то с нуля написал, что-то добавил.
Что-то добавляешь, потом другое работать перестаёт,
там всё переделываешь, ну сами знаете как бывает.
Короче в данном апдейте:

1. Квады монстров в сцене боя теперь тоже смотрят на камеру.
2. Теперь монстр с определённым шансом может позвать себе
в подмогу на сцене боя от 0 до 2 таких же монстров.
3. Теперь можно останавливать время например для
перехода на элементы интерфейса, чтобы можно было спокойно
подумать что нажимать, для следующего пункта это используется.
4. Появились кнопки, которые спрашивают нас хотим
ли в бою мы быть в стороне, или участвовать лично.
Ну и собственно вся эта система работает, за исключением
того, что я функцию создания самого персонажа ещё не добавил.
5. Теперь в сцене боя управляемая камера, которая ориентируется
также в размерах сгенерированного уровня, и не выползает за него.

Билда: https://yadi.sk/d/V5BwvRZBdpB6EA

И, я даю вам возможность в данный момент поковыряться в самом проекте:

https://yadi.sk/d/5dgYQ7_Vps5tEA

Потрошите, изучайте, используйте в своих проектах интересные вам функции.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Crystal за это полезное сообщение:
ABTOMAT (10.04.2020), St_AnGer (11.04.2020)
Старый 18.04.2020, 21:41   #81
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 4,785
Написано 1,501 полезных сообщений
(для 4,868 пользователей)
Ответ: I.D.S. MONSTERS

Ас-саляму алейкум товарищи атеисты, программисты, тунеядцы,
и мазохисты, и прочие кто бы вы там ни были, всем здрасте!

В общем спешу сообщить, у меня был секс, и ещё какой!
Юнити отымел мой мосг во всех позах камасутры.
А раз я здесь, значит я его перетрахал!

Короче, что за жёпа меня постигла? Дело в том, что мой
предыдущий код генерирования меша образующего сетку - говно.
Как оказалось, создавалась нифига не сетка, а квад из двух треугольников,
растянутый вершинами по площади игрового поля!

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

А всё дело в том, что моя система создания сетки опиралась на опыт
конструирования оной в блитце, но у нас же юнити, и вертел он
знаешь ли наш предыдущий опыт на детородном органе!
Эта тварюга вместо генерации новых вершин и треугольников,
в каждый момент когда нужно было создать ячейку сетки,
просто переписывала данные предыдущих вершин и треугольников,
и растягивала эти четыре вершины. Я когда до этого допёр,
очень хотел обоссать лицо разрабам юнити за создание такой
неудобной системы процедурной генерации так сказать.

Дальше было больше! Я относился к "Vector3" как к хранилищу
координатных точек, и собственно при построении двух треугольников
использовал всего 4 точки, ну ибо нафига больше, если точки
пересекаются. Так вот при создании новой системы генерации сетки
я столкнулся с жопой фантастических масштабов, у меня чё только
не генерировалось: лесенки, заборы, многоугольные геометрические
фигуры, или дроблёное поле. Пришлось атаковать американские
ресурсы через гугол, чтобы вычитать что за хрень творится
с "Vector3". И чё я выяснил? А "Vector3" это нихрена не хранилище
точек по трём координатам, а хранилище именно векторов,
а вектор это не точка нихрена, и по этому у меня генерировалась всякая
шняга! Решить проблему можно было переводом "Vector3" из векторной
системы, в точечную через "Matrix4x4.MultiplyPoint", или Matrix4x4.MultiplyPoint3x4,
но я послав на три всем знакомые буквы это великолепное развлечение
от разработчиков юнити, пошёл другим путём. Я просто на 2 треугольника
создаю теперь 6 вершин через тот же банк векторов "Vector3",
и всё работает. В общем текст короткий, но разобрался я
в этом дерьме как вы понимаете не так быстро, как описал суть проблемы.

В общем вот прототип теперь точно рабочего кода ,
пока что он генерирует сетку по размерам игрового поля,
далее мне нужно будет привязать это к системе определения,
какого размера сетку строить, а после научить код не рисовать
квадраты там, куда наш монстр не может пойти, опираясь
на его максимальный радиус движения, и массив непроходимости:


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

public class TEST : MonoBehaviour
{
    public Mesh SetkaDvij2;
    public int SetkaDvijScaleZ2 = 11; //Размер сетки по оси "Z".
    public int SetkaDvijScaleX2 = 11; //размер сетки по оси "X".
    public int SetcaDvijPloshad2 = 0; //Площадь сетки.
    public int ZDvij = 0;
    public int XDvij = 0;
    public int UDvij = 0;

    private int VSPX;
    private int VSPZ;


    public int TESTE = 0;

    public int[,] SetkaPassability;
    public int SPK;
    private Vector3[] Vershini1;
    private int[] Bermudes1;
    private int VK = 0;
    private int BR = 0;
    private int SDVIG = 0;
    private int SDVIG2 = 1;

    private int SDVIGX = 0;
    private int SDVIGX2 = 0;
    private int SDVIGFUCK = 0;

    private int RAZDELITEL = 0;



    void Start()
    {

        SetkaPassability = SetkaPassabilityControl.Setka;
        TESTE = 1;



    }

    void Update()
    {
        //------------------------------------------------------------------------------------------------------------------------------------

        if (TESTE == 1)
        {

            //Расчёт площади сетки.
            SetcaDvijPloshad2 = SetkaDvijScaleZ2 * SetkaDvijScaleX2;
            SDVIGX = SetkaDvijScaleX2;


            Vershini1 = new Vector3[(SetcaDvijPloshad2 * 6)];
            Bermudes1 = new int[(SetcaDvijPloshad2 * 6)];
            SetkaDvij2 = new Mesh();
            //Создаём меш.

            //Подключаем меш фильтр.
            MeshFilter SetkaDvijFilter2 = GetComponent<MeshFilter>();
            //Применяем мешфильтр к мешу.
            SetkaDvijFilter2.mesh = SetkaDvij2;

            SPK = SetkaPassabilityControl.SetkaScaleControl;
            TESTE = 2;


            SetkaPassabilityControl.Setka[SetkaDvijScaleX2 - 1, SetkaDvijScaleZ2 - 1] = 1; // Непроходимый квадрат

        }
        if (SPK == 2 && TESTE == 2)
        {








            //Циклы создания сетки исходя из её размера по оси "z" и оси "x" а так же её площади.


                for (ZDvij = 0; ZDvij < SetkaDvijScaleZ2; SetkaDvijScaleZ2--)
            {


                    for (XDvij = 0; XDvij < SetkaDvijScaleX2; SetkaDvijScaleX2--)

                {

                        for (UDvij = 0; UDvij < SetcaDvijPloshad2; SetcaDvijPloshad2--)
                        {



                        Vershini1[VK] = new Vector3(SetkaDvijScaleX2 - SDVIG2, SetkaDvijScaleZ2 - 1 - SDVIGFUCK, 0);
                        Vershini1[VK + 1] = new Vector3(SetkaDvijScaleX2 - SDVIG, SetkaDvijScaleZ2 - 1 - SDVIGFUCK, 0);
                        Vershini1[VK + 2] = new Vector3(SetkaDvijScaleX2 - SDVIG2, SetkaDvijScaleZ2 - SDVIGFUCK, 0);

                        Vershini1[VK + 3] = new Vector3(SetkaDvijScaleX2 - SDVIG, SetkaDvijScaleZ2 - SDVIGFUCK, 0);
                        Vershini1[VK + 4] = new Vector3(SetkaDvijScaleX2 - SDVIG, SetkaDvijScaleZ2 - 1 - SDVIGFUCK, 0);
                        Vershini1[VK + 5] = new Vector3(SetkaDvijScaleX2 - SDVIG2, SetkaDvijScaleZ2 - SDVIGFUCK, 0);

                        Debug.Log("VK" + Vershini1[VK]);
                        Debug.Log("VK + 1" + Vershini1[VK + 1]);
                        Debug.Log("VK + 2" + Vershini1[VK + 2]);
                        Debug.Log("VK + 3" + Vershini1[VK + 3]);
                        Debug.Log("VK + 4" + Vershini1[VK + 4]);
                        Debug.Log("VK + 5" + Vershini1[VK + 5]);

                        RAZDELITEL = RAZDELITEL + 1;
                        Debug.Log("RAZDELITEL -----------" + RAZDELITEL);


                        VK = VK + 6;
                        SDVIG = SDVIG + 1;
                        SDVIG2 = SDVIG2 + 1;
                        SDVIGX2 = SDVIGX2 + 1;


                        if (SDVIGX2 == SDVIGX)
                        {
                            SDVIGX2 = 0;
                            SDVIGFUCK = SDVIGFUCK + 1;
                        }


                        if (SDVIG == SDVIGX)
                        {
                            SDVIG = 0;
                        }

                        if (SDVIG2 == SDVIGX + 1)
                        {
                            SDVIG2 = 1;
                        }



                        //Создаём массив с трианглами.

                        Bermudes1[BR] = 0 + BR;
                        Bermudes1[BR + 1] = 2 + BR;
                        Bermudes1[BR + 2] = 1 + BR;
                        Bermudes1[BR + 3] = 3 + BR;
                        Bermudes1[BR + 4] = 5 + BR;
                        Bermudes1[BR + 5] = 4 + BR;
                        BR = BR + 6;


                      
                        Debug.Log("Создали Квады");

                        if (SetcaDvijPloshad2 <= 1)
                        {
                            TESTE = 3;


                        }
                    }

                }
            }

            
        }

        if (TESTE == 3 && SetcaDvijPloshad2 == 0)
        {

            Debug.Log("Создали SetkaDvij");


            //Задаём вершины мешу.
            SetkaDvij2.vertices = Vershini1;
            //Создаём трианглы меша.
            SetkaDvij2.triangles = Bermudes1;



            TESTE = 4;
        }




    }
}


Я уже говорил, код пишется для того, чтобы потом его переписывать.

З.ы. А ещё юнити задолбал крашиться, выходит из строя до переустановки.
Вёжл Студия от мелкософта тож задолбала, кончается пробный период,
логиньтесь говорит, я логинюсь, а там тоже краш (логинится похоже через старый ИЕ, в котором нет нужных функций, у меня семёрка).
Приходится её туда-сюда переустанавливать (студию).

В общем разработка этой игры мне даётся с большой болью,
во времена дарк бэйсика, блитца, и хорса, у меня таких проблем не было.
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо Crystal за это полезное сообщение:
ABTOMAT (18.04.2020), ant0N (22.04.2020), Arton (21.04.2020), Randomize (19.04.2020)
Старый 10.05.2020, 23:32   #82
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 4,785
Написано 1,501 полезных сообщений
(для 4,868 пользователей)
Ответ: I.D.S. MONSTERS

Так, я не пропал! Ни на что не забил, и ничё не забил.
Я просто больше играю в игры, чем кодю.

Короче, я всё-таки реализовал новую версию процедурной
генерации визуализации сетки хождения монстра полигонами.
Она сейчас плотно связана с матрицей проходимости,
и с радиусом максимального хождения монстра (например 5*5).
Билды пока не будет, так-как всё это дело снова надо привязать
к клику по монстру, это в процессе.

Столкнулся с массой сложностей, которые пришлось решать на ходу.
Например, из-за того что я конструирую сетку хождения монстра
в цикле через FOR, ячейки создаются по очереди, и чтобы мне
в функции создать возможность проверки на то, стоит ли мне
в нужных квадратах рисовать полигоны, или нет, мне пришлось
два двумерных массива координат, перегонять в одномерные,
т.е. переводить из координатной системы, в номерную,
где номер, это номер ячейки сетки игрового поля.

С переводом координат в номера ячейки матрицы проходимости
особых сложностей не возникло, но вот вообще высчитать
радиус прорисовки вокруг монстра, а после перевести
эти координаты в номера ячеек было той ещё трёхдневной болью.
В генерации этого меша на данный момент задействовано пять массивов,
и девять различных циклов, это довольно сложная система,
и рабочая.

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

В общем всё зер гуд, результат моих мучений здесь, комментов в них мало:


Строим матрицу проходимости:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SetkaPassabilityControl : MonoBehaviour
{

    public static int[,] Setka;
    public float SetkaScaleXf;
    public float SetkaScaleZf;
    public int SetkaScaleX;
    public int SetkaScaleZ;

    public int ChoTam2;

    public static int SetkaScaleControl = 0;

   
    void Update()
    {
        if (SetkaScaleControl == 0)
        {
            if (GLOBALSUPERSCRIPT.LevelScaleStatus == 1)
            {
                SetkaScaleXf = GLOBALSUPERSCRIPT.LevelScaleX;
                SetkaScaleZf = GLOBALSUPERSCRIPT.LevelScaleZ;
                
                SetkaScaleX = Mathf.RoundToInt(SetkaScaleXf);
                SetkaScaleZ = Mathf.RoundToInt(SetkaScaleZf);
                SetkaScaleControl = 1;
            }

           
        }

        if (SetkaScaleControl == 1)
        {
            Setka = new int[(SetkaScaleX * SetkaScaleZ) - SetkaScaleX + 1, SetkaScaleZ + 1];



            Setka[0, (SetkaScaleZ / 2) - 1] = 1; // Непроходимый квадрат
            Setka[0, 3] = 1; // Непроходимый квадрат

            SetkaScaleControl = 2;
        }

        ChoTam2 = Setka[SetkaScaleX - 1, (SetkaScaleZ / 2) - 1];

    }

    
   
}
Генерируем область, в которую может пойти монстр:
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using UnityEngine;

public class TEST : MonoBehaviour
{
    public Mesh SetkaDvij2;

    public int[,] MonHodMass;
    public int[] MonHodYachMass;
    private int SetkaMonHodX = 5;
    private int SetkaMonHodZ = 5;
    public int PloshMonHodXZ;
    public int Xcount = 0;
    public int Zcount = 0;
    public int UniversalCounter = 0; //Универсальный многоразовый счётчик для разных задачь
    public int UniversalCounter2 = 0; //Универсальный многоразовый счётчик для разных задачь
    public int UniversalCounter3 = 0; //Универсальный многоразовый счётчик для разных задачь
    public int Zcounter = 0;


    private int SetkaDvijScaleZ2 = 11; //Размер сетки по оси "Z".
    private int SetkaDvijScaleX2 = 11; //размер сетки по оси "X".
    private int SetcaDvijPloshad2 = 0; //Площадь сетки.
    public int PloshCraft;
    public int[] PloshCraftMass;
    public int PloshCraftMassCounter = 0;
    public int PloshCraftFor = 0;
    private int PloX = 0;
    private int PloZ = 1;
    private int Perebor = 0;


    public int ZDvij = 0;
    public int XDvij = 0;
    public int UDvij = 0;

    private int VSPX;
    private int VSPZ;


    public int TESTE = 0;


    public int SPK;
    private Vector3[] Vershini1;
    private int[] Bermudes1;
    private int VK = 0;
    private int BR = 0;
    private int SDVIG = 0;
    private int SDVIG2 = 1;

    private int SDVIGX = 0;
    private int SDVIGX2 = 0;
    private int SDVIGFUCK = 0;

    private int RAZDELITEL = 0;




    public int ZERO = 0; // Просто ноль, по тому, что мне нужен ноль.
    public int MonCorZ;
    public int MonCorX;
    public int SX;



    private float BermudesTimer;

    void Start()
    {

        MonHodMass = new int[(SetkaDvijScaleX2 * SetkaDvijScaleZ2) + 1, SetkaDvijScaleZ2 + 1 + SetkaMonHodZ];



    }

    void Update()
    {
        if (TESTE == 0)
        {
            if (SetkaPassabilityControl.SetkaScaleControl == 3)
            {

                TESTE = 1;
            }
            
        }
        //------------------------------------------------------------------------------------------------------------------------------------

        if (TESTE == 1)
        {

            //Расчёт площади сетки.
            SetcaDvijPloshad2 = SetkaDvijScaleZ2 * SetkaDvijScaleX2;
            PloshCraft = SetcaDvijPloshad2;
            Perebor = SetcaDvijPloshad2 - 1;
            PloshCraftMass = new int[PloshCraft];

            MonHodYachMass = new int[PloshCraft];

            for (PloshCraftFor = 0; PloshCraftFor < PloshCraft; PloshCraft--)
            {
                PloshCraftMass[PloshCraftMassCounter] = SetkaPassabilityControl.Setka[PloX, PloZ];

                PloshCraftMassCounter = PloshCraftMassCounter + 1;


                PloZ = PloZ + 1;
                if (PloZ > SetkaDvijScaleZ2)
                {
                    PloZ = 1;
                    PloX = PloX + SetkaDvijScaleZ2;
                }

            }

            //--------------\/------------------- В разработке ----------------------------------------------------------------------------------------------

            // Ищем координаты монстра, и занимаемся поиском координат клеток в радиусе шагания монстра -----

            MonCorZ = 6; //Z координаты монстра
            MonCorX = 11; //X координаты монстра

            MonCorZ = (MonCorZ - (SetkaMonHodZ / 2)); //Z координата точки отсчёта построения сетки ходьбы
            MonCorX = (MonCorX - (SetkaMonHodX / 2)); //X координата точки отсчёта построения сетки ходьбы


            MonCorX = MonCorX - 1; //X координаты монстра, еденицу отнимаем, чтобы воспользоваться формулой для расчёта X координаты номера ячейки

            PloshCraft = SetcaDvijPloshad2;
            PloshCraftMassCounter = 0;
            PloshMonHodXZ = SetkaMonHodX * SetkaMonHodZ;



                Xcount = MonCorX;

            if (Xcount > 0)
            {
                for (ZERO = 0; ZERO < Xcount; Xcount--)
                {
                    SX = SX + SetkaDvijScaleZ2;

                }
            }

            if (Xcount <= 0)
            {
                for (ZERO = 0; ZERO > Xcount; Xcount++)
                {
                    SX = SX - SetkaDvijScaleZ2;
                }
            }

            UniversalCounter2 = SetkaMonHodX;
            UniversalCounter3 = SetkaMonHodX;

            for (ZERO = 0; ZERO < UniversalCounter3; UniversalCounter3--)
            {
                for (ZERO = 0; ZERO < UniversalCounter2; UniversalCounter2--)
                {
                    if ((SX + Zcounter + MonCorZ) <= PloshCraft && (SX + Zcounter + MonCorZ) >= 0 - SetkaMonHodX && (MonCorZ + UniversalCounter) >= 0 && (MonCorZ + UniversalCounter) <= SetkaDvijScaleZ2)
                    {
                        Debug.Log("X" + SX + Zcounter);
                        Debug.Log("Z" + MonCorZ + UniversalCounter);
                        MonHodMass[SX + Zcounter, MonCorZ + UniversalCounter] = 3;
                    }
                    UniversalCounter = UniversalCounter + 1;

                    if (UniversalCounter > (SetkaMonHodX - 1))
                    {
                        UniversalCounter = 0;
                    }
                }

                Zcounter = Zcounter + SetkaDvijScaleZ2;
                UniversalCounter2 = SetkaMonHodX;

            }

            SX = 0;
            UniversalCounter = 0;
            UniversalCounter2 = 0;
            UniversalCounter3 = 0;








                PloX = 0;
                PloZ = 1;

            for (PloshCraftFor = 0; PloshCraftFor < PloshCraft; PloshCraft--)
            {
                MonHodYachMass[PloshCraftMassCounter] = MonHodMass[PloX, PloZ];

                PloshCraftMassCounter = PloshCraftMassCounter + 1;


                PloZ = PloZ + 1;
                if (PloZ > SetkaDvijScaleZ2)
                {
                    PloZ = 1;
                    PloX = PloX + SetkaDvijScaleZ2;
                }
            }


                //-----------------------------------------------------------------------------------------------
                //-----------------/\---------------- В разработке ----------------------------------------------------------------------------------------------




                SDVIGX = SetkaDvijScaleX2;


            Vershini1 = new Vector3[(SetcaDvijPloshad2 * 6)];
            Bermudes1 = new int[(SetcaDvijPloshad2 * 6)];
            SetkaDvij2 = new Mesh();
            //Создаём меш.

            //Подключаем меш фильтр.
            MeshFilter SetkaDvijFilter2 = GetComponent<MeshFilter>();
            //Применяем мешфильтр к мешу.
            SetkaDvijFilter2.mesh = SetkaDvij2;

            SPK = SetkaPassabilityControl.SetkaScaleControl;
            TESTE = 2;

           

        }
        if (SPK == 3 && TESTE == 2)
        {








            //Циклы создания сетки исходя из её размера по оси "z" и оси "x" а так же её площади.





            for (ZDvij = 0; ZDvij < SetkaDvijScaleZ2; SetkaDvijScaleZ2--)
            {


                for (XDvij = 0; XDvij < SetkaDvijScaleX2; SetkaDvijScaleX2--)

                {

                    for (UDvij = 0; UDvij < SetcaDvijPloshad2; SetcaDvijPloshad2--)
                    {



                      if (MonHodYachMass[Perebor] == 3 && PloshCraftMass[Perebor] == 0)
                      {

                        Vershini1[VK] = new Vector3(SetkaDvijScaleX2 - SDVIG2, SetkaDvijScaleZ2 - 1 - SDVIGFUCK, 0);
                        Vershini1[VK + 1] = new Vector3(SetkaDvijScaleX2 - SDVIG, SetkaDvijScaleZ2 - 1 - SDVIGFUCK, 0);
                        Vershini1[VK + 2] = new Vector3(SetkaDvijScaleX2 - SDVIG2, SetkaDvijScaleZ2 - SDVIGFUCK, 0);

                        Vershini1[VK + 3] = new Vector3(SetkaDvijScaleX2 - SDVIG, SetkaDvijScaleZ2 - SDVIGFUCK, 0);
                        Vershini1[VK + 4] = new Vector3(SetkaDvijScaleX2 - SDVIG, SetkaDvijScaleZ2 - 1 - SDVIGFUCK, 0);
                        Vershini1[VK + 5] = new Vector3(SetkaDvijScaleX2 - SDVIG2, SetkaDvijScaleZ2 - SDVIGFUCK, 0);
                      }

                        Perebor = Perebor - 1;


                        Debug.Log("VK" + Vershini1[VK]);
                        Debug.Log("VK + 1" + Vershini1[VK + 1]);
                        Debug.Log("VK + 2" + Vershini1[VK + 2]);
                        Debug.Log("VK + 3" + Vershini1[VK + 3]);
                        Debug.Log("VK + 4" + Vershini1[VK + 4]);
                        Debug.Log("VK + 5" + Vershini1[VK + 5]);

                        RAZDELITEL = RAZDELITEL + 1;
                        Debug.Log("RAZDELITEL -----------" + RAZDELITEL);


                        VK = VK + 6;
                        SDVIG = SDVIG + 1;
                        SDVIG2 = SDVIG2 + 1;
                        SDVIGX2 = SDVIGX2 + 1;


                        if (SDVIGX2 == SDVIGX)
                        {
                            SDVIGX2 = 0;
                            SDVIGFUCK = SDVIGFUCK + 1;
                        }


                        if (SDVIG == SDVIGX)
                        {
                            SDVIG = 0;
                        }

                        if (SDVIG2 == SDVIGX + 1)
                        {
                            SDVIG2 = 1;
                        }



                        //Создаём массив с трианглами.

                       

                    

                            Bermudes1[BR] = 0 + BR;
                            Bermudes1[BR + 1] = 2 + BR;
                            Bermudes1[BR + 2] = 1 + BR;
                            Bermudes1[BR + 3] = 3 + BR;
                            Bermudes1[BR + 4] = 5 + BR;
                            Bermudes1[BR + 5] = 4 + BR;
                            BR = BR + 6;
                     

                      
                        Debug.Log("Создали Квад");

                        if (SetcaDvijPloshad2 <= 1)
                        {
                            TESTE = 3;


                        }
                    }

                }
            }

            
        }

        if (TESTE == 3 && SetcaDvijPloshad2 == 0)
        {

            Debug.Log("Создали SetkaDvij");


            //Задаём вершины мешу.
            SetkaDvij2.vertices = Vershini1;
            //Создаём трианглы меша.
            SetkaDvij2.triangles = Bermudes1;



            TESTE = 4;
        }




    }
}


Ну и скриншот того, что сейчас генерится вокруг среднего монстра,
он у меня сейчас условно считается выделенным, пока без текстур,
и специально чуть приподнято:
Миниатюры
Нажмите на изображение для увеличения
Название: OP.png
Просмотров: 19
Размер:	666.1 Кб
ID:	23097  
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ant0N (11.05.2020)
Старый 11.05.2020, 00:00   #83
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 4,785
Написано 1,501 полезных сообщений
(для 4,868 пользователей)
Ответ: I.D.S. MONSTERS

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

П.с. на разработчиков No Man's Sky после своего генератора,
смотрю как на мифических зодчих всемогущих, не смотря на то,
что их игра полное говно, у них генерируются целые планеты,
с ландшафтами, пещерами, морями, ресурсами, растениями,
это что-то невероятное.Правда мир у них воксельный,
а не полигональный.
(Offline)
 
Ответить с цитированием
Старый 17.05.2020, 11:04   #84
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 4,785
Написано 1,501 полезных сообщений
(для 4,868 пользователей)
Ответ: I.D.S. MONSTERS

Это какая то война с юнити!
В общем прикрутил новую систему к клику мышью по монстру,
всё прекрасно работает. Далее в американских интернетах
вычитал, как программно создать коллайдер по форме меша, прикрутил.
Ну и попытался сделать перемещение монстра в точку пика на его
графической сетке проходимости. Мучился много, непонятно почему
луч в половине случаев простреливал сквозь казалось бы цельный меш.
В общем рыл долго в направлении коллайдеров, всё там перешуршал,
ничего не помогает.

И тут вдруг я начинаю переключать режимы рендера в сцене, и о чудо
ёмаё. Оказалось половина треугольников развёрнута не в ту сторону,
и видно это только в типе рендера "Render Paths", в обычном рендере
сцены, и игровом рендере меш рисовался как правильный,
скрин в посте выше, а вот и причина моей ночной головной боли:
Миниатюры
Нажмите на изображение для увеличения
Название: vsu.png
Просмотров: 11
Размер:	672.3 Кб
ID:	23098  
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Crystal за это полезное сообщение:
Arton (17.05.2020), St_AnGer (17.05.2020)
Старый 17.05.2020, 11:09   #85
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 4,785
Написано 1,501 полезных сообщений
(для 4,868 пользователей)
Ответ: I.D.S. MONSTERS

Заменил местами две вершины в массиве, всё встало в норму.
наконец-то можно поспать, а в другой раз уже делать перемещение монстров.
Миниатюры
Нажмите на изображение для увеличения
Название: vsu.png
Просмотров: 10
Размер:	652.1 Кб
ID:	23099  
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Crystal за это полезное сообщение:
Arton (17.05.2020), St_AnGer (17.05.2020)
Старый 19.05.2020, 22:43   #86
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 4,785
Написано 1,501 полезных сообщений
(для 4,868 пользователей)
Ответ: I.D.S. MONSTERS

Итак комрады, билда подъехала!: ТЫЫЫК

Добавлена возможность управления перемещением монстра.
Добавлены функции изменения состояния квадратов сетки проходимости
(грубо говоря куда шагнули, там квадрат стал непроходимым,
откуда ушли, тот стал проходимым).

В данный момент временно отключена система случайной подмоги монстра,
вы можете войти в сцену боя только с одним монстром.

Как управлять? Лкм на монстра, лкм в точку перемещения в радиусе доступности.

Прошу тестировать, по перемещаться столько, сколько вам будет не влом.
Отловка багов занимает в сотню раз больше времени, чем разработка
функций, которые потом пораждают эти баги. Я оттестил и отшлифовал
по максимуму, но баги вероятно могут ещё быть. Жду отзывов.
(Offline)
 
Ответить с цитированием
Старый 20.05.2020, 10:07   #87
ant0N
Бывалый
 
Аватар для ant0N
 
Регистрация: 10.06.2011
Адрес: В горах
Сообщений: 791
Написано 295 полезных сообщений
(для 770 пользователей)
Ответ: I.D.S. MONSTERS

Сразу скажу, что запускал через вайн. Комп старый, на интегрированной видюхе.

1. низкий фпс, на глаз не больше 5 - 10
Я понимаю что в игре графон и все такое, но старые игры через тот же вайн у меня работают хорошо.
нужно срочно переводить игру на ecs, jobs, burst и scriptable object. Нёх в помощь


2. При клике по монстру появляется интерфейс без текста. В первый раз игра зависла на этом моменте.


3. В бою я почему-то управляю не своим персонажем, а монстром.
Когда я довел монстра до своего персонажа, то последний начал медленно улетать в горизонт.


4. Игра закрывается только убийством процесса.


Хорошая игра и бои интересные.
Миниатюры
Нажмите на изображение для увеличения
Название: ids2.png
Просмотров: 29
Размер:	344.6 Кб
ID:	23101  Нажмите на изображение для увеличения
Название: ids.png
Просмотров: 25
Размер:	659.2 Кб
ID:	23102  
__________________
Абсолютли!
(Offline)
 
Ответить с цитированием
Старый 20.05.2020, 12:23   #88
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 4,785
Написано 1,501 полезных сообщений
(для 4,868 пользователей)
Ответ: I.D.S. MONSTERS

Щас на скорую руку фрапсом посмотрел, в 60 фпс
упёрлось, это ограничение самой проги. Наверное по тому, что монитор 60 герц, по факту макс скорость выше).
Чёт у тебя с компом или дрвоами, у меня игра летает.
Я на своей машине тестировал игру, выводил на экран 2000 монстров,
и при этом одновременно 20 монстров каждую секунду удалялись, и 20 создавались,
и фпс не проседал.

То что текста нет, я хз, стандартным методом юнити текст выводится.
То есть стандартные кнопки на стандартном канвасе,
слова выводятся встроенным в кнопки в юнити текстом.

В бою ты и должен управлять монстром, такая билда.
То что куб улетел это нормально, хотя я монстрам
коллайдеры подрезал вроде не должны были задевать уже,
но это пофиг, не то тестим щас )

Ладно, жду отзывы и других тестеров.
У меня комп Core Quad Q8200, 8гб ОЗУ, карта GF1660 SUPER,
игра летает. Комп слабый как видите, если у вас ещё хуже
(куда уж хуже, моему процессору 12 лет), то про fps можно вообще не писать ))

Последний раз редактировалось Crystal, 20.05.2020 в 13:42.
(Offline)
 
Ответить с цитированием
Старый 20.05.2020, 14:31   #89
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 4,785
Написано 1,501 полезных сообщений
(для 4,868 пользователей)
Ответ: I.D.S. MONSTERS

Коллега щас затестил. i7, 16 гб озу, GF1070.
144 FPS выдало, это максимальаня герцовка монитора его.
Чёто у тебя антон проблемы каике-то с железом или дровами.
(Offline)
 
Ответить с цитированием
Старый 20.05.2020, 17:36   #90
ant0N
Бывалый
 
Аватар для ant0N
 
Регистрация: 10.06.2011
Адрес: В горах
Сообщений: 791
Написано 295 полезных сообщений
(для 770 пользователей)
Ответ: I.D.S. MONSTERS

Сообщение от Crystal Посмотреть сообщение
Коллега щас затестил. i7, 16 гб озу, GF1070.
144 FPS выдало, это максимальаня герцовка монитора его.
Чёто у тебя антон проблемы каике-то с железом или дровами.
не поленился, поставили крайзис через тот же вайн.
На низких настройках фпс не менее 30 (по ощущениям около 60)

Недавно прошел The Matrix: Puth of Neo. На стандартных настройках фпс так же не менее 30. Хоть игра и древняя, но там и анимация и отражения и частицы и эффекты


Мне кажется, проблемы не у меня.
__________________
Абсолютли!
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 22:35.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com