Unity

Установка
 Установить Unity Hub
 Переназначить папку хранения Unity x.x.x в  Unity Hub
 Найти в архиве Unity 2019.3.12
 Автоматическая установка IDE Microsoft Visual Studio x Community


Создание Приложения для платформ
1. PC
2. Android

using  UnityEngine;
using  UnityEditor;
[CustomEditor(typeof(world_sqa))]
public class gui_sqa: Editor{
public override void OnInspectorGUI(){example_foldout();}
Test:test{
//тестовый квадрат{static bool showPosition = false;}
//тестовый размер куба{static public byte _LV = 1;}
//тестовый вектор центра куба{static public Vector3 _v = Vector3.zero;}
//тестовый грань куба{static public byte _F = 4;}
static public void ВыполнитьТест(){bool change = false;

if (gui.Вектор(ref test_v) || gui.ползунок(ref test_LV,1,6) || gui.ползунок(ref test_F,0,5))
{
ObjectManager.Кубы.transform.ОдинКвадрат();
}
byte new_f = (byte)(EditorGUILayout.IntSlider(_F, 0, 5));
if (new_f != _F){change = true;}
byte new_lv = (byte)(EditorGUILayout.IntSlider(_LV, 1, 5));
if (new_lv != _LV){change = true;}
Vector3 new_v = EditorGUILayout.Vector3Field("v", _v);
if (new_v != _v){change = true;}

if (change){_F = new_f;
_LV = new_lv;
_v = new_v;
ObjectManager.Кубы.transform.ОдинКвадрат();
}
}
}

static public void example_foldout(){showPosition = EditorGUILayout.Foldout(showPosition, "triangle");
if (showPosition){if (Selection.activeTransform){ВыполнитьТест();}
if (!Selection.activeTransform){showPosition = false;}
}
}
}

using UnityEngine;
using UnityEditor;

// создание квадрата из двух треугольников
static public class MathHelper_sqa{static public void ОдинКвадрат(this Transform go){go.УдалениеОбъектов();
Меш m = new Меш();
m.sqa.Add(new square(gui_triangle._v,gui_triangle. _F, gui_triangle._LV));

m.Треугольники();
m.ПривязатьМешКОбъекту(go);
}
static public void Треугольники(this Меш m){foreach (square s in m.sqa){m.СобираемТреугольники(s);}
}
static public void СобираемТреугольники(this Меш m, square sqa){m.СозданиеСвязейДляЧетырёхВершинСДвумяТреугольниками();
for (byte i = 0; i < 4; i++){m.vs.Add(sqa.Вершина(i));
m.uvs.Add(sqa.F.uv(m.vs[m.vs.Count-1]));
}
}
// закрытие двумя треугольниками меша
// m - меш
static public void СозданиеСвязейДляЧетырёхВершинСДвумяТреугольниками(this Меш m)
{for (byte i = 0; i < 2; i++){m.ЗакрытьТреугольник((byte)(3 * i));}
}
// Закрытие треугольника тремя точками в triangles индексами
// m - меш,в котором закрывается треугольник
// I - начальный индекс закрытия треугольника
static public void ЗакрытьТреугольник(this Меш m, byte I){for (byte i = 0; i < 3; i++){m.ts.Add(m.vs.Count + arr.МассивЧетырехВершин[I + i]);}
}
// развертка по типу куб по 6 направлениям и сохранение новой вершины куба в vertex
// F - грань куба из шести граней
// v - вектор-вершина куба
// результат вектора развёртки
static public Vector2 uv(this byte F, Vector3 v){switch (F){case 0://left
case 1://right
return new Vector2(v.z, v.y);
case 2://down
case 3://up
return new Vector2(v.x, v.z);
case 4://back
case 5://front
return new Vector2(v.x, v.y);
}
return Vector2.zero;
}
}

// квадрат из шести для куба

using  UnityEngine;
public class square{поля класса{///#l#summary>
//размер куба (1=1x1,2=2x2,3=4x4,4=8x8,5=16x16,6=32x32){public byte LV = 1;}
//грань куба{public byte F;}
//центр куба{Vector3 Центр;}
}
public square(Vector3 Центр, byte F, byte LV){this.F = F;
this.Центр = Центр;
this.LV = LV; 
}
public float POW{get{return Mathf.Pow(2, LV);}} 
public float PART{get{return 1 / POW;}}
//массивы{порядок (индексы) создания двух треугольников для квадрата
//МассивЧетырехВершин
{static public byte[] arr_sqa = new byte[6]#ll#0, 2, 3, 3, 1, 0#rr#;}
определение вершины квадрата (одной из восьми)
по F (одной из шести граней куба) 
по порядковому индексу создания треугольника для квадрата
//СписокИндексовВершинКуба
{static public byte[,] arr_f = new byte[6, 4]#ll#
#ll#2, 6, 0, 4#rr#,
#ll#7, 3, 5, 1#rr#,
#ll#4, 5, 0, 1#rr#,
#ll#2, 3, 6, 7#rr#,
#ll#3, 2, 1, 0#rr#,
#ll#6, 7, 4, 5#rr#
#rr#;}
векторы восьми вершин куба
//i_ВекторыВершинКуба
{static public Vector3[] arr_v = new Vector3[8]#ll#
new Vector3(-1, -1, -1),new Vector3(+1, -1, -1),
new Vector3(-1, +1, -1),new Vector3(+1, +1, -1),
new Vector3(-1, -1, +1),new Vector3(+1, -1, +1),
new Vector3(-1, +1, +1),new Vector3(+1, +1, +1)
#rr#;}
}
одна из вершин квадрата
i - один из четырёх индексов вершин квадрата для куба
результат - одна из восьми вершин куба 
public Vector3 Вершина(byte i){return Центр + PART * arr_v[arr_f[F, i]];}
}

uWintab{

Tablet.cs{
mono класс, связанный с библиотекой Lib по управлением пером
}
}
тестовая работа пера
mono.cs{
public class mono : MonoBehaviour{
uWintab.Tablet tablet_;


void Start(){
tablet_ = FindObjectOfType<uWintab.Tablet>();
}
// Update is called once per frame
void Update(){
if (((Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved) || tablet_.pressure>0.1f)){
Plane objPlane = new Plane(Camera.main.transform.forward * -1, this.transform.position);
Ray mRay = Camera.main.ScreenPointToRay(Input.mousePosition);
float rayDistance;
if (objPlane.Raycast(mRay, out rayDistance))
this.transform.position = mRay.GetPoint(rayDistance);
}
}
}
}



Подкатегории

  1. класс создаётся в виде скрипта
  2. все классы хранятся в файле формата cs от С#
  3. имя класса соотвествует имени файла, в котором находится сам класс
  4. по умолчанию пустой класс C#  наследует класс MonoBehaviour от Unity
  5. класс может иметь свои или наследуемые методы
  6. класс может объявляться с присваиванием значений по умолчанию для полей
  7. класс может привязывается к игровому объекту сцены unity если наследует класс MonoBehaviour 

Без вызова Экземпляра
 Класс
  статическая get,set статического класса
  статическая функция статического класса
  статическая метод-функция класса
Класс предка MonoBehaviour
  статическая get,set класса предка MonoBehaviour
  статическая метод-функция класса предка MonoBehaviour

Вызвать Экземпляр
 Класс
  get,set класса
  метод-функция класса
 Класс предка MonoBehaviour
  get,set  класса предка MonoBehaviour
  метод-функция  класса предка MonoBehaviour

Функция
 объявление локальной переменной внутри функции неявно или типизированным способом
Класс
 объявление поля только типизированным способом

ключевые слова в C#

применяется для определения или разрешения использования типов как пространств имен

Модуль - сборка 

  1. настройка среды разработки для С# или JavaScript для скрипта
    Edit\Preferences..\External Tools\External Script Editor="Visual Studio 2017 (Comminity)"
  2. редактор сцены или уровня
    File\Open Scene... -> Assets\Scenes\SampleScene.unity
  3. настройка свойств объекта в инспекторе
  4. управление объектами в виде иерархического дерева
  1. создание проекта
    UnityHub\Projects\Add\{Version}{3D}{ProjectName}{Location}\Create->открывается Редактор
  2. сохранение проекта
    в Редакторе -> File\Save Project
  3. открыть проект
    UnityHub\Projects\->выбрать проект
  • открыть Проект
  • первая созданная сцена Unity
    File\Open Scene... -> Assets\Scenes\SampleScene.unity
  • создать новую сцену
    File\New Scene... -> Assets\Scenes\...\New.unity
  • сохранить текущую сцену
    File\Save
    File\Save As... -> Assets\Scenes\...\New.unity
  • GameObject
  • Базовый класс для всех объектов на сценах Unity
    создание пустого игрового объекта на сцене Unity
    открыть Сцену->Tab Hierarchy -> RBM (Right Button Mouse)-> Create Empty

Инспектор

Компоненты

  • гайки и болты Игровых Объектов и поведения в игре
  • Они являются функциональными частями каждого Игрового Объекта
    Фундаментальный объект в сценах Unity, который может представлять персонажей, реквизиты, пейзажи, камеры, путевые точки и многое другое
  1. открыть проект
  2. настройка среды разработки для С# или JavaScript в Редакторе для скриптов
    Edit\Preferences..\External Tools\External Script Editor="Visual Studio 2017 (Comminity)"
  3. создание пустого скрипта С#
    в Редакторе Tab Project->директория->RBM (Right Button Mouse)->create\C# Script ->Имя.cs (имя соотвествует имени класса в самом файле)

Все основные элементы языка C# для создания скриптов на Unity

для шейдера
от Unity
описательный язык программирования шейдера
cодержит в себе шейдерный код CG
обеспечивает взаимодействие с инспектором и материалом
включает в себя встроенные переменные и функции, облегчающие процесс написания шейдера
описывает свойства шейдера
содержит множество решений для различного графического оборудования

Каналы youtube

{

TheGameDev

{

Shader Forge часть 1

{

тесселяция dx11

}

Shader Forge часть 2

{

Custom Lighting

{

закручивание

ломка текстуры при помощи каналов цвета

плавная периодичность ломки текстуры

накладывание двух текстур

встроенная анимация

}

Lit (Basic)

{

тесселяция

}

Post Effect для камеры

{

тип шейдера

красивая загрузка

Game over

}

Shader Forge часть 3

{

ZWrite

глубина отрисовки объекта за стеной

}

}

}