01.03.2020, 22:51
|
#50
|
Терабайт исходников
Регистрация: 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();
}
}
}
}
}
}
}
|
(Offline)
|
|