update all
This commit is contained in:
Dvurechensky 2025-05-12 01:29:30 +03:00
parent 6f8b8bbf42
commit 570f1eec6b
11 changed files with 204 additions and 122 deletions

2
.gitignore vendored

@ -1,3 +1,5 @@
pre_commit.ps1
pre_commit.log
UnityProject/Library
UnityProject/.vs
UnityProject/obj

@ -1,3 +1,11 @@
/*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 01:23:16
* Version: 1.0.3
*/
using UnityEngine;
public class ControllerLessons : MonoBehaviour

@ -1,13 +1,21 @@
/*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 01:23:16
* Version: 1.0.3
*/
using UnityEngine;
/*
* Отслеживание нажатий от пользователя
* Отслеживание нажатий от пользователя
*/
public class Lesson4_2_Scale : MonoBehaviour
{
/// <summary>
/// Отправляется, когда пользователь нажимает кнопку мыши
/// в области GUIElement или Collider
/// Отправляется, когда пользователь нажимает кнопку мыши
/// в области GUIElement или Collider
/// </summary>
private void OnMouseDown()
{
@ -15,7 +23,7 @@ public class Lesson4_2_Scale : MonoBehaviour
}
/// <summary>
/// Отправляется, когда пользователь отпускает кнопку мыши.
/// Отправляется, когда пользователь отпускает кнопку мыши.
/// </summary>
private void OnMouseUp()
{
@ -23,15 +31,15 @@ public class Lesson4_2_Scale : MonoBehaviour
}
/// <summary>
/// Вызывается, когда пользователь щелкнул Collider и все еще удерживает мышь.
/// Вызывается, когда пользователь щелкнул Collider и все еще удерживает мышь.
/// </summary>
private void OnMouseDrag()
{
// переменной записываються координаты мыши по X и Y
// переменной записываються координаты мыши по X и Y
var mousePosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 13f);
// переменной - объекту присваиваеться переменная с координатами мыши
// переменной - объекту присваиваеться переменная с координатами мыши
var objPosition = Camera.main.ScreenToWorldPoint(mousePosition);
//объекту записываються координаты
//объекту записываються координаты
transform.position = objPosition;
}
}

@ -1,9 +1,17 @@
/*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 01:23:16
* Version: 1.0.3
*/
using System.Collections;
using UnityEngine;
/*
* Переменные и основные функции
* в порядке иерархии выполнения сверху вниз
* Переменные и основные функции
* в порядке иерархии выполнения сверху вниз
*/
public class Lesson_2 : MonoBehaviour
{
@ -15,26 +23,26 @@ public class Lesson_2 : MonoBehaviour
public bool ShowLateUpdateString = false;
#endregion
#region Поля
#region Поля
/// <summary>
/// Публичные поля
/// Публичные поля
/// </summary>
public int PoleK = 0;
/// <summary>
/// Закрытые поля
/// Закрытые поля
/// </summary>
private int PoleI = 0;
/// <summary>
/// Поля публичные в рамках скрипта
/// как для объектов скрипта так и для редактора Unity
/// закрытые в рамках обращения из других скриптов
/// Поля публичные в рамках скрипта
/// как для объектов скрипта так и для редактора Unity
/// закрытые в рамках обращения из других скриптов
/// </summary>
[SerializeField]
private int PoleG = 0;
#endregion
/// <summary>
/// Свойства
/// Свойства
/// </summary>
public bool StatusReset
{
@ -46,13 +54,13 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// (Больше работает в Unity)
/// Сброс вызывается, когда пользователь нажимает
/// кнопку «Сброс» в контекстном меню Инспектора
/// или при первом добавлении компонента.
/// Эта функция вызывается только в режиме редактора.
/// Сброс чаще всего используется для получения
/// хороших значений по умолчанию в Инспекторе.
/// (Больше работает в Unity)
/// Сброс вызывается, когда пользователь нажимает
/// кнопку «Сброс» в контекстном меню Инспектора
/// или при первом добавлении компонента.
/// Эта функция вызывается только в режиме редактора.
/// Сброс чаще всего используется для получения
/// хороших значений по умолчанию в Инспекторе.
/// </summary>
[ContextMenu("Reset")]
private void Reset()
@ -66,12 +74,12 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Всегда вызывается до любых функций Start
/// и также после того, как префаб был вызван в сцену
/// (если GameObject неактивен на момент старта,
/// Awake не будет вызван,
/// пока GameObject не будет активирован,
/// или функция в каком-нибудь прикреплённом скрипте не вызовет Awake).
/// Всегда вызывается до любых функций Start
/// и также после того, как префаб был вызван в сцену
/// (если GameObject неактивен на момент старта,
/// Awake не будет вызван,
/// пока GameObject не будет активирован,
/// или функция в каком-нибудь прикреплённом скрипте не вызовет Awake).
/// </summary>
private void Awake()
{
@ -79,11 +87,11 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// (вызывается только если объект активен):
/// Эта функция вызывается сразу после включения объекта.
/// Это происходит при создании образца MonoBehaviour,
/// например, при загрузке уровня или был вызван
/// GameObject с компонентом скрипта.
/// (вызывается только если объект активен):
/// Эта функция вызывается сразу после включения объекта.
/// Это происходит при создании образца MonoBehaviour,
/// например, при загрузке уровня или был вызван
/// GameObject с компонентом скрипта.
/// </summary>
private void OnEnable()
{
@ -91,8 +99,8 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Вызывается до обновления первого кадра(first frame)
/// только если скрипт включен.
/// Вызывается до обновления первого кадра(first frame)
/// только если скрипт включен.
/// </summary>
private void Start()
{
@ -100,15 +108,15 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Зачастую случается, что FixedUpdate вызывается чаще чем Update.
/// FU может быть вызван несколько раз за кадр, если FPS низок
/// и функция может быть и вовсе не вызвана между кадрами, если FPS высок.
/// Все физические вычисления и обновления происходят сразу после FixedUpdate.
/// При применении расчётов передвижения внутри FixedUpdate,
/// вам не нужно умножать ваши значения на Time.deltaTime.
/// Потому что FixedUpdate вызывается в соответствии с надёжным таймером,
/// независящим от частоты кадров.
/// Другие методы физики:
/// Зачастую случается, что FixedUpdate вызывается чаще чем Update.
/// FU может быть вызван несколько раз за кадр, если FPS низок
/// и функция может быть и вовсе не вызвана между кадрами, если FPS высок.
/// Все физические вычисления и обновления происходят сразу после FixedUpdate.
/// При применении расчётов передвижения внутри FixedUpdate,
/// вам не нужно умножать ваши значения на Time.deltaTime.
/// Потому что FixedUpdate вызывается в соответствии с надёжным таймером,
/// независящим от частоты кадров.
/// Другие методы физики:
/// yield WaitForFixedUpdate
/// OnTriggerXXX
/// OnCollisionXXX
@ -120,7 +128,7 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Отправляется, когда мышь входит в элемент.
/// Отправляется, когда мышь входит в элемент.
/// </summary>
private void OnMouseOver()
{
@ -129,7 +137,7 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Отправляется, когда мышь входит в элемент или один из его потомков.
/// Отправляется, когда мышь входит в элемент или один из его потомков.
/// </summary>
private void OnMouseEnter()
{
@ -138,7 +146,7 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Вызывается, когда пользователь щелкнул Collider и все еще удерживает мышь.
/// Вызывается, когда пользователь щелкнул Collider и все еще удерживает мышь.
/// </summary>
private void OnMouseDrag()
{
@ -147,8 +155,8 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Отправляется, когда пользователь нажимает кнопку мыши
/// в области GUIElement или Collider
/// Отправляется, когда пользователь нажимает кнопку мыши
/// в области GUIElement или Collider
/// </summary>
private void OnMouseDown()
@ -158,7 +166,7 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Отправляется, когда пользователь отпускает кнопку мыши.
/// Отправляется, когда пользователь отпускает кнопку мыши.
/// </summary>
private void OnMouseUp()
{
@ -167,7 +175,7 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Вызывается, когда мышь больше не находится над Collider.
/// Вызывается, когда мышь больше не находится над Collider.
/// </summary>
private void OnMouseExit()
{
@ -176,7 +184,7 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Вызывается раз за кадр. Это главная функция для обновлений кадров.
/// Вызывается раз за кадр. Это главная функция для обновлений кадров.
/// </summary>
private void Update()
{
@ -185,11 +193,11 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Game Logic - строго после Update и перед LateUpdate
/// yield return null - Сопрограмма продолжит выполнение, после того, как все Update функции были вызваны в следующем кадре.
/// yield return new WaitForSeconds() - Продолжает выполнение после заданной временной задержки, и после все Update функций, вызванных в итоговом кадре.
/// yield WWW - продолжает выполнение после завершения WWW-загрузки.
/// yield StartCoroutine() - сцепляет сопрограмму, и будет ждать, пока не завершится сопрограмма MyFunc.
/// Game Logic - строго после Update и перед LateUpdate
/// yield return null - Сопрограмма продолжит выполнение, после того, как все Update функции были вызваны в следующем кадре.
/// yield return new WaitForSeconds() - Продолжает выполнение после заданной временной задержки, и после все Update функций, вызванных в итоговом кадре.
/// yield WWW - продолжает выполнение после завершения WWW-загрузки.
/// yield StartCoroutine() - сцепляет сопрограмму, и будет ждать, пока не завершится сопрограмма MyFunc.
/// </summary>
/// <returns></returns>
private IEnumerator ShowGameLogic()
@ -201,12 +209,12 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// LateUpdate вызывается раз в кадр, после завершения Update.
/// Любые вычисления произведённые в Update будут уже выполнены на момент начала LateUpdate.
/// Часто LateUpdate используют для преследующей камеры от третьего лица.
/// Если вы перемещаете и поворачиваете персонажа в Update,
/// вы можете выполнить все вычисления перемещения и вращения камеры в LateUpdate.
/// Это обеспечит то, что персонаж будет двигаться до того, как камера отследит его позицию.
/// LateUpdate вызывается раз в кадр, после завершения Update.
/// Любые вычисления произведённые в Update будут уже выполнены на момент начала LateUpdate.
/// Часто LateUpdate используют для преследующей камеры от третьего лица.
/// Если вы перемещаете и поворачиваете персонажа в Update,
/// вы можете выполнить все вычисления перемещения и вращения камеры в LateUpdate.
/// Это обеспечит то, что персонаж будет двигаться до того, как камера отследит его позицию.
/// </summary>
private void LateUpdate()
{
@ -215,8 +223,8 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Scene rendering - строго после выполнения LateUpdate
/// Вызывается один раз для каждой камеры, если объект в поле зрения.
/// Scene rendering - строго после выполнения LateUpdate
/// Вызывается один раз для каждой камеры, если объект в поле зрения.
/// </summary>
private void OnWillRenderObject()
{
@ -225,9 +233,9 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Вызывается до того, как камера отсечёт сцену. Отсечение определяет,
/// какие объекты будут видны в камере. OnPreCull вызывается прямо перед тем,
/// как начинается отсечение.
/// Вызывается до того, как камера отсечёт сцену. Отсечение определяет,
/// какие объекты будут видны в камере. OnPreCull вызывается прямо перед тем,
/// как начинается отсечение.
/// </summary>
private void OnPreCull()
{
@ -236,7 +244,7 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Вызывается тогда, когда объект становится видимым любой камере.
/// Вызывается тогда, когда объект становится видимым любой камере.
/// </summary>
private void OnBecameVisible()
{
@ -245,7 +253,7 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Вызывается тогда, когда объект становится невидимым любой камере.
/// Вызывается тогда, когда объект становится невидимым любой камере.
/// </summary>
private void OnBecameInvisible()
{
@ -254,7 +262,7 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Вызывается перед тем, как камера начнёт рендерить сцену.
/// Вызывается перед тем, как камера начнёт рендерить сцену.
/// </summary>
private void OnPreRender()
{
@ -263,9 +271,9 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Вызывается, после того, как все обычные рендеры сцены завершатся.
/// Вы можете использовать класс GL или Graphics.DrawMeshNow,
/// чтобы рисовать пользовательскую геометрию в данной точке.
/// Вызывается, после того, как все обычные рендеры сцены завершатся.
/// Вы можете использовать класс GL или Graphics.DrawMeshNow,
/// чтобы рисовать пользовательскую геометрию в данной точке.
/// </summary>
private void OnRenderObject()
{
@ -274,7 +282,7 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Вызывается после того, как камера завершит рендер сцены.
/// Вызывается после того, как камера завершит рендер сцены.
/// </summary>
private void OnPostRender()
{
@ -283,11 +291,11 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Вызывается после завершения рендера сцены,
/// для возможности пост-обработки изображения экрана.
/// Вызывается после завершения рендера сцены,
/// для возможности пост-обработки изображения экрана.
/// </summary>
/// <param name="source">текущий экран</param>
/// <param name="destination">куда сохранить</param>
/// <param name="source">текущий экран</param>
/// <param name="destination">куда сохранить</param>
private void OnRenderImage(RenderTexture source, RenderTexture destination)
{
if (ShowSceneRenderingString == true)
@ -295,8 +303,8 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Используется для отрисовки гизмо в окне Scene View в целях визуализации.
/// Только в Editor Unity
/// Используется для отрисовки гизмо в окне Scene View в целях визуализации.
/// Только в Editor Unity
/// </summary>
private void OnDrawGizmos()
{
@ -305,9 +313,9 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Вызывается несколько раз за кадр и отвечает за элементы интерфейса (GUI).
/// Сначала обрабатываются события макета и раскраски,
/// после чего идут события клавиатуры/мышки для каждого события.
/// Вызывается несколько раз за кадр и отвечает за элементы интерфейса (GUI).
/// Сначала обрабатываются события макета и раскраски,
/// после чего идут события клавиатуры/мышки для каждого события.
/// </summary>
private void OnGUI()
{
@ -316,9 +324,9 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// (Работает один раз)
/// Вызывается также после yield WaitForEndFrame
/// Отправляется всем GameObjects, когда приложение приостанавливается.
/// (Работает один раз)
/// Вызывается также после yield WaitForEndFrame
/// Отправляется всем GameObjects, когда приложение приостанавливается.
/// </summary>
/// <param name="pause"></param>
private void OnApplicationPause(bool pause)
@ -327,7 +335,7 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Вызывается, когда объект отключается или становится неактивным.
/// Вызывается, когда объект отключается или становится неактивным.
/// </summary>
private void OnDisable()
{
@ -335,10 +343,10 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Вызывается для всех игровых объектов перед тем,
/// как приложение закрывается. В редакторе вызывается тогда,
/// когда игрок останавливает игровой режим.
/// В веб-плеере вызывается по закрытия веб окна.
/// Вызывается для всех игровых объектов перед тем,
/// как приложение закрывается. В редакторе вызывается тогда,
/// когда игрок останавливает игровой режим.
/// В веб-плеере вызывается по закрытия веб окна.
/// </summary>
private void OnApplicationQuit()
{
@ -346,9 +354,9 @@ public class Lesson_2 : MonoBehaviour
}
/// <summary>
/// Эта функция вызывается после всех обновлений кадра
/// в последнем кадре объекта, пока он ещё существует
/// (объект может быть уничтожен при помощи Object.Destroy или при закрытии сцены).
/// Эта функция вызывается после всех обновлений кадра
/// в последнем кадре объекта, пока он ещё существует
/// (объект может быть уничтожен при помощи Object.Destroy или при закрытии сцены).
/// </summary>
private void OnDestroy()
{

@ -1,8 +1,16 @@
/*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 01:23:16
* Version: 1.0.3
*/
using System.Collections.Generic;
using UnityEngine;
/*
* Объекты, компоненты, условные операции и циклы
* Объекты, компоненты, условные операции и циклы
*/
public class Lesson_3 : MonoBehaviour
{
@ -33,7 +41,7 @@ public class Lesson_3 : MonoBehaviour
if (obj == null && createObjList.Count == 0)
return;
//если объект Lesson_7 существует в списке Lesson_3
//если объект Lesson_7 существует в списке Lesson_3
var existObjLs7 = createObjList.FindIndex((ob) => ob.name == "Cylinder(Clone)");
if(existObjLs7 == -1 && obj != null)
createObjList.Add(obj);

@ -1,7 +1,15 @@
/*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 01:23:16
* Version: 1.0.3
*/
using UnityEngine;
/*
* Отслеживание нажатий от пользователя
* Отслеживание нажатий от пользователя
*/
public class Lesson_4 : MonoBehaviour
{

@ -1,7 +1,15 @@
/*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 01:23:16
* Version: 1.0.3
*/
using UnityEngine;
/*
* Instantiate(Создание объектов)
* Instantiate(Создание объектов)
*/
public class Lesson_5 : MonoBehaviour
{
@ -18,7 +26,7 @@ public class Lesson_5 : MonoBehaviour
ControllerLessons.Instance.Lesson_3.createObjList.Add(clone);
}
//Создание и взаимодействие с созданным
//Создание и взаимодействие с созданным
inst_Object = Instantiate(gameObjects[2], new Vector3(10,10,10), Quaternion.identity);
inst_Object.name = "my";
inst_Object.GetComponent<Renderer>().material.color = Color.red;

@ -1,8 +1,16 @@
/*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 01:23:16
* Version: 1.0.3
*/
using System.Collections;
using UnityEngine;
/*
* Êîðóòèíû (Coroutines)
* Корутины (Coroutines)
*/
public class Lesson_6 : MonoBehaviour
{

@ -1,10 +1,18 @@
/*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 01:23:16
* Version: 1.0.3
*/
using UnityEngine;
/*
* Создаёт объект для Lesson_8
* События OnCollision и OnTrigger
* проявляющееся на объекте Cube
* после соприкосновения с Wall
* Создаёт объект для Lesson_8
* События OnCollision и OnTrigger
* проявляющееся на объекте Cube
* после соприкосновения с Wall
*/
public class Lesson_7 : MonoBehaviour
{

@ -1,13 +1,21 @@
/*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 01:23:16
* Version: 1.0.3
*/
using UnityEngine;
/*
* События OnCollision и OnTrigger
* События OnCollision и OnTrigger
*/
public class Lesson_7_2_Scale : MonoBehaviour
{
/// <summary>
/// Вызывается когда объект соприкасается с другим
/// объектом (строго наличие RigitBody)
/// Вызывается когда объект соприкасается с другим
/// объектом (строго наличие RigitBody)
/// </summary>
/// <param name="collision">Collision</param>
private void OnCollisionEnter(Collision collision)
@ -16,8 +24,8 @@ public class Lesson_7_2_Scale : MonoBehaviour
}
/// <summary>
/// OnCollisionExit вызывается, когда этот коллайдер/жесткое
/// тело перестал касаться другого твердого тела/коллайдера.
/// OnCollisionExit вызывается, когда этот коллайдер/жесткое
/// тело перестал касаться другого твердого тела/коллайдера.
/// </summary>
/// <param name="collision">Collision</param>
private void OnCollisionExit(Collision collision)
@ -26,8 +34,8 @@ public class Lesson_7_2_Scale : MonoBehaviour
}
/// <summary>
/// OnCollisionStay вызывает один раз в кадре для каждого
/// коллайдера/жесткого тела, который касается вопроса жесткого тела/коллайдера.
/// OnCollisionStay вызывает один раз в кадре для каждого
/// коллайдера/жесткого тела, который касается вопроса жесткого тела/коллайдера.
/// </summary>
/// <param name="collision">Collision</param>
private void OnCollisionStay(Collision collision)
@ -36,8 +44,8 @@ public class Lesson_7_2_Scale : MonoBehaviour
}
/// <summary>
/// Вызывается когда объект соприкасается
/// с другим объектом (строго наличие Collider)
/// Вызывается когда объект соприкасается
/// с другим объектом (строго наличие Collider)
/// </summary>
private void OnTriggerEnter(Collider other)
{
@ -45,7 +53,7 @@ public class Lesson_7_2_Scale : MonoBehaviour
}
/// <summary>
/// OnTriggerExit вызывается, когда коллайдер other перестал касаться триггера.
/// OnTriggerExit вызывается, когда коллайдер other перестал касаться триггера.
/// </summary>
/// <param name="other">Collider</param>
private void OnTriggerExit(Collider other)
@ -54,7 +62,7 @@ public class Lesson_7_2_Scale : MonoBehaviour
}
/// <summary>
/// OnTriggerStay вызывается почти во всех кадрах для каждого другого коллайдера, касающегося триггера.
/// OnTriggerStay вызывается почти во всех кадрах для каждого другого коллайдера, касающегося триггера.
/// </summary>
/// <param name="other">Collider</param>
private void OnTriggerStay(Collider other)

@ -1,11 +1,19 @@
/*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 01:23:16
* Version: 1.0.3
*/
using UnityEngine;
using UnityEngine.UI;
/*
* События OnCollision и OnTrigger
* проявляющееся на объекте Cube
* после соприкосновения с Wall
* и GameObject.Find
* События OnCollision и OnTrigger
* проявляющееся на объекте Cube
* после соприкосновения с Wall
* и GameObject.Find
*/
public class Lesson_8 : MonoBehaviour
{