Unity

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


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

#region IXmlSerializable
public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}
//Загрузить из XML
public void Загрузить(string filename)
{
this.Clear();
//System.IO.FileStream stream = System.IO.File.Open(filename + ".xml", System.IO.FileMode.Open);
//System.Xml.XmlReaderSettings settings = new System.Xml.XmlReaderSettings();
//settings.DtdProcessing = System.Xml.DtdProcessing.Parse;
System.Xml.XmlReader reader = System.Xml.XmlReader.Create(filename + ".xml");
ReadXml(reader);
}
public void ReadXml(System.Xml.XmlReader reader)
{
XmlSerializer keySerializer = new XmlSerializer(typeof(ulong));
XmlSerializer valueSerializer = new XmlSerializer(typeof(T));
bool wasEmpty = reader.IsEmptyElement;
reader.Read();
if (wasEmpty)
return;

reader.ReadStartElement("users");

while (reader.NodeType != System.Xml.XmlNodeType.EndElement)
{
if (reader.NodeType == System.Xml.XmlNodeType.None)
return;
reader.ReadStartElement("item");

reader.ReadStartElement("key");
ulong key = (ulong)keySerializer.Deserialize(reader);
reader.ReadEndElement();

reader.ReadStartElement("value");
T value = (T)valueSerializer.Deserialize(reader);
reader.ReadEndElement();

this.Add(key, value);

reader.ReadEndElement();

reader.MoveToContent();
}
reader.ReadEndElement();
}
//сохранить из XML
public void Сохранить(string filename)
{
System.IO.FileStream stream = System.IO.File.Open(filename + ".xml", System.IO.FileMode.OpenOrCreate);
//System.Xml.XmlReaderSettings settings = new System.Xml.XmlReaderSettings();
//settings.DtdProcessing = System.Xml.DtdProcessing.Parse;

System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings();
//settings.OmitXmlDeclaration = true;
settings.ConformanceLevel = System.Xml.ConformanceLevel.Document;
//settings.CloseOutput = true;

System.Xml.XmlWriter writer = System.Xml.XmlWriter.Create(stream, settings);
WriteXml(writer);
}
public void WriteXml(System.Xml.XmlWriter writer)
{
XmlSerializer keySerializer = new XmlSerializer(typeof(ulong));
XmlSerializer valueSerializer = new XmlSerializer(typeof(T));

writer.WriteStartDocument();
writer.WriteStartElement("users");
foreach (ulong key in this.Keys)
{
writer.WriteStartElement("item");

writer.WriteStartElement("key");
keySerializer.Serialize(writer, key);
writer.WriteEndElement();

writer.WriteStartElement("value");
T value = this[key];
valueSerializer.Serialize(writer, value);
writer.WriteEndElement();

writer.WriteEndElement();
}
writer.WriteEndDocument();
writer.Close();
}
#endregion

public void Верстка(ref Mesh m)
{

Vector2[] uvs = new Vector2[m.vertices.Length];
var ts_x = (from t in Триугольники orderby t.x select t.x).ToList();
var ts_z = (from t in Триугольники orderby t.z select t.z).ToList();
var ts_y = (from t in Триугольники orderby t.y select t.y).ToList();

var max_x = ts_x.Last();
var max_y = ts_y.Last();
var max_z = ts_z.Last();

var dx = 0.0f;
var dy = 0.0f;
var dz = 0.0f;
if (ts_x[0] < 0)
{dx = Mathf.Abs(ts_x[0]);
max_x += Mathf.Abs(ts_x[0]);}
if (ts_y[0] < 0)
{dy = Mathf.Abs(ts_y[0]);
max_y += dy;}
if (ts_z[0] < 0){dz = Mathf.Abs(ts_z[0]);
max_z += dz;}
for (int i = 0; i < uvs.Length; i++){uvs[i] = new Vector2((m.vertices[i].x + dx)/ max_x, (m.vertices[i].z + dz) / max_z);}
m.uv = uvs;
}

static public void ИзменитьПиксель(int x, int y, Color c)
{byte size;
string path;

string f = "Assets/Resources/"+path+".asset";
Texture2D img = (Texture2D)AssetDatabase.LoadAssetAtPath(f, typeof(Texture2D));

Color[] colorArray = img.GetPixels();
for (byte dx = 0; dx < 4; dx++)
for (byte dy = 0; dy < 4; dy++)
colorArray[dx + x + (y + dy) * size] = c;

AssetDatabase.StartAssetEditing();

img.SetPixels(colorArray);
img.Apply();

AssetDatabase.StopAssetEditing();
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
[CustomEditor(typeof(Bo52_x.MONO_x))]
public class gui : Bo52_16102020130441917.MONO_16102020130441917.gui
{private GameObject go;

public override void event_MouseMove()
{RaycastHit HIT;

Ray ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
int layerMask = 1 #l##l# 9;

if (!Physics.Raycast(ray, out HIT, Mathf.Infinity, layerMask))
return;

if (HIT.collider == null) return;
//if (HIT.collider.gameObject.tag == "vertex")
//Selection.objects = new Object[1] { HIT.collider.gameObject };
GameObject.Find("Cube").transform.position = HIT.point;
go=HIT.collider.gameObject;
//ИзменитьПиксель(x, y, Color c);
}

public override void OnSceneGUI()
{base.OnSceneGUI();
}
}

[CustomEditor(typeof(START))]
public class gui : Editor
{public void OnSceneGUI()
{if (ОбновлениеРедактора){ОбновлениеРедактора = false;
Bo52_17102020101208823.MONO_17102020101208823.ВосстановитьПоверхность();
}
}

static Color matColor;
static public float УменьшитьЯркость(ref Color c){float h = 0;
float s = 0;
float v1 = 0;

Color.RGBToHSV(c, out h, out s, out v1);

c = Color.HSVToRGB(h, s, v);
return v;
}
static public float УвеличитьЯркость(ref Color c)
{float h = 0;
float s = 0;
float v1 = 0;

Color.RGBToHSV(c, out h, out s, out v1);

c = Color.HSVToRGB(h, s, v);
return v;
}
static float v=1.0f;
public void Цвета(ref Color c){
matColor = EditorGUILayout.ColorField("New Color", matColor);
var new_v = Bo52_16102020135416295.STATIC.ползунок(v);
if (new_v != v){
if (new_v>v)
УвеличитьЯркость(ref c);
else
УменьшитьЯркость(ref c);
v = new_v;
}
GUILayout.BeginHorizontal();
GUI.color = Color.black;
if (Bo52_16102020135416295.STATIC.кнопка("", 50))
c = GUI.color;
GUI.color = Color.gray;
if (Bo52_16102020135416295.STATIC.кнопка("", 50))
c = GUI.color;
GUI.color = Color.green;
if (Bo52_16102020135416295.STATIC.кнопка("", 50))
c = GUI.color;
GUI.color = Color.blue;
if (Bo52_16102020135416295.STATIC.кнопка("", 50))
c = GUI.color;
GUI.color = Color.cyan;
if (Bo52_16102020135416295.STATIC.кнопка("", 50))
c = GUI.color;
GUI.color = Color.yellow;
if (Bo52_16102020135416295.STATIC.кнопка("", 50))
c = GUI.color;
GUI.color = Color.magenta;
if (Bo52_16102020135416295.STATIC.кнопка("", 50))
c = GUI.color;
GUI.color = Color.red;
if (Bo52_16102020135416295.STATIC.кнопка("", 50))
c = GUI.color;
GUI.color = new Color(0.85f,0.7f,0.4f);
if (Bo52_16102020135416295.STATIC.кнопка("", 50))
c = GUI.color;
GUILayout.EndHorizontal();
}

public override void OnInspectorGUI()
{((START)target).ИНСПЕКТОР();
Цвета(ref matColor);
}
}

public void СохранитьПрефаб(script path)
{string namefile = "Assets/Resources/" + path+ ".asset";
if (File.Exists(namefile))
AssetDatabase.SaveAssets();
else
AssetDatabase.CreateAsset(this, namefile);
}

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

  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

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

}

}

}