Тема: I.D.S. MONSTERS
Показать сообщение отдельно
Старый 01.03.2020, 22:51   #50
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений
(для 5,374 пользователей)
Ответ: I.D.S. MONSTERS

В данный момент выкладка билды смысла не имеет,
решил запилить отчёт девблогом:



Код:


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

public class SetkaDvijControl : MonoBehaviour
{

    //Сетка движения юнита.
    //-------------------------------------------------------------------------------------------------------------------------------------------
    public int SetkaDvijCreator = 0;
    public GameObject SetkaMobile;
    public GameObject TipaMonster;
    public float SetkaScaleZ = 10;
    public float SetkaScaleX = 10;
    public float SetkaDvijScaleZ = 5; //Размер сетки по оси "Z".
    public float SetkaDvijScaleX = 5; //размер сетки по оси "X".


    public float SetcaDvijPloshad; //Площадь сетки.

    //Статичные переменные для отсчёта в циклах создания клеток сетки.
    public int ZDvij = 0;
    public int XDvij = 0;
    public int UDvij = 0;

    public Vector3 Pickposition;
    public float MonsterHoditX;
    public float MonsterHoditZ;
    public float vx;
    public float vz;



    void Update()
    {


        if (Input.GetKeyDown(KeyCode.Space))
        {

            if (SetkaDvijCreator == 0)
            {

                SetkaDvijCreator = 1;

                Pickposition = TipaMonster.transform.position;


                MonsterHoditX = SetkaDvijScaleX / 2f;
                MonsterHoditZ = SetkaDvijScaleZ / 2f;


                SetkaMobile.transform.position = new Vector3(Pickposition.x - MonsterHoditX, 0, Pickposition.z - MonsterHoditZ);


                //Регулируем размер сетки выделения и её позицию относительно краёв поля

                // Если сетка выползла за левый край игрового поля, подрезаем её на количество выползающих клеток, и на столько же сдвигаем
                if (Pickposition.x - MonsterHoditX < 0)

                {
                    vx = Pickposition.x - MonsterHoditX;
                    SetkaDvijScaleX = SetkaDvijScaleX + vx;
                    SetkaMobile.transform.position = new Vector3(Pickposition.x - MonsterHoditX - vx, 0, Pickposition.z - MonsterHoditZ);
                }

                // Если сетка выползла за правый край игрового поля, подрезаем её на количество выползших клеток
                if (Pickposition.x + MonsterHoditX > SetkaScaleX)

                {
                    vx = (Pickposition.x + MonsterHoditX) - SetkaScaleX;
                    SetkaDvijScaleX = SetkaDvijScaleX - vx;
                }


                // Если сетка выползла за нижний край игрового поля, подрезаем егё на количество выползающих клеток, и на столько же сдвигаем

                if (Pickposition.z - MonsterHoditZ < 0)

                {
                    vz = Pickposition.z - MonsterHoditZ;
                    SetkaDvijScaleZ = SetkaDvijScaleZ + vz;
                    SetkaMobile.transform.position = new Vector3(Pickposition.x - MonsterHoditX, 0, Pickposition.z - MonsterHoditZ - vz);
                }

                // Если сетка выползла за верхний край игрового поля, подрезаем её на количество выползших клеток
                if (Pickposition.z + MonsterHoditZ > SetkaScaleZ)

                {
                    vz = (Pickposition.z + MonsterHoditZ) - SetkaScaleZ;
                    SetkaDvijScaleZ = SetkaDvijScaleZ - vz;
                }


                //------------------------------------------------------------------------------------------------------------------------------------


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

               

                //Расчёт площади сетки.
                SetcaDvijPloshad = SetkaDvijScaleZ * SetkaDvijScaleX;

                //Создаём меш.



                //Циклы создания сетки исходя из её размера по оси "z" и оси "x" а так же её площади.
                for (ZDvij = 0; ZDvij < SetkaDvijScaleZ; SetkaDvijScaleZ--)
                {



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

                    {



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








                                //Создаём вектор вершин с массивом из четырёх штук.
                                Vector3[] Vershini2 = new Vector3[4]
                                {
                               //Пишем в масси координаты вершин опираясь на размер сетки по её осям.
                                new Vector3(0,0,0), new Vector3(SetkaDvijScaleX,0,0), new Vector3(0,SetkaDvijScaleZ,0), new Vector3(SetkaDvijScaleX,SetkaDvijScaleZ,0)
                                };


                                //Создаём массив с трианглами.
                                int[] Bermudes2 = new int[6];
                                Bermudes2[0] = 0;
                                Bermudes2[1] = 2;
                                Bermudes2[2] = 1;
                                Bermudes2[3] = 2;
                                Bermudes2[4] = 3;
                                Bermudes2[5] = 1;

                                Vector2[] TextureCoordinates2 = new Vector2[4]
                                {

                              new Vector2(0,0) , new Vector2(SetkaDvijScaleX,0) , new Vector2(0,SetkaDvijScaleZ) , new Vector2(SetkaDvijScaleX, SetkaDvijScaleZ)

                                };



                                //Задаём вершины мешу.
                                SetkaDvij.vertices = Vershini2;
                                //Создаём трианглы меша.
                                SetkaDvij.triangles = Bermudes2;
                                SetkaDvij.uv = TextureCoordinates2;

                                SetkaDvij.RecalculateBounds();
                                SetkaDvij.RecalculateNormals();
                                SetkaDvij.RecalculateTangents();

                            }
                        }
                    }




                

            }




        }

    }
}
__________________
Проект "Deathbring World - Rangers" и его финансовая поддержка:
https://boosty.to/deathbringrangers

Я на - TWITCH
Канал на YouTube
(Offline)
 
Ответить с цитированием