2025-05-12 01:29:30 +03:00
/ *
* Author : Nikolay Dvurechensky
* Site : https : //www.dvurechensky.pro/
* Gmail : dvurechenskysoft @gmail . com
* Last Updated : 12 м а я 2025 01 : 23 : 16
* Version : 1.0 . 3
* /
2024-10-05 08:54:55 +03:00
using System.Collections ;
using UnityEngine ;
/ *
2025-05-12 01:29:30 +03:00
* П е р е м е н н ы е и о с н о в н ы е ф у н к ц и и
* в п о р я д к е и е р а р х и и в ы п о л н е н и я с в е р х у в н и з
2024-10-05 08:54:55 +03:00
* /
public class Lesson_2 : MonoBehaviour
{
#region Control State
public bool ShowSceneRenderingString = false ;
public bool ShowMouseEventString = false ;
public bool ShowUpdateString = false ;
public bool ShowFixedUpdateString = false ;
public bool ShowLateUpdateString = false ;
#endregion
2025-05-12 01:29:30 +03:00
#region П о л я
2024-10-05 08:54:55 +03:00
/// <summary>
2025-05-12 01:29:30 +03:00
/// Публичные поля
2024-10-05 08:54:55 +03:00
/// </summary>
public int PoleK = 0 ;
/// <summary>
2025-05-12 01:29:30 +03:00
/// Закрытые поля
2024-10-05 08:54:55 +03:00
/// </summary>
private int PoleI = 0 ;
/// <summary>
2025-05-12 01:29:30 +03:00
/// Поля публичные в рамках скрипта
/// как для объектов скрипта так и для редактора Unity
/// закрытые в рамках обращения из других скриптов
2024-10-05 08:54:55 +03:00
/// </summary>
[SerializeField]
private int PoleG = 0 ;
#endregion
/// <summary>
2025-05-12 01:29:30 +03:00
/// Свойства
2024-10-05 08:54:55 +03:00
/// </summary>
public bool StatusReset
{
get
{
print ( $"Reset {StatusReset}" ) ;
return true ;
}
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// (Больше работает в Unity)
/// С б р о с вызывается, когда пользователь нажимает
/// кнопку «Сброс» в контекстном меню Инспектора
/// или при первом добавлении компонента.
/// Эта функция вызывается только в режиме редактора.
/// С б р о с чаще всего используется для получения
/// хороших значений по умолчанию в Инспекторе.
2024-10-05 08:54:55 +03:00
/// </summary>
[ContextMenu("Reset")]
private void Reset ( )
{
ShowSceneRenderingString = false ;
ShowMouseEventString = false ;
ShowFixedUpdateString = false ;
ShowUpdateString = false ;
ShowLateUpdateString = false ;
print ( $"Reset {this.GetType().Name}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Всегда вызывается до любых функций Start
/// и также после того, как префаб был вызван в сцену
/// (если GameObject неактивен на момент старта,
/// Awake не будет вызван,
/// пока GameObject не будет активирован,
/// или функция в каком-нибудь прикреплённом скрипте не вызовет Awake).
2024-10-05 08:54:55 +03:00
/// </summary>
private void Awake ( )
{
print ( $"Awake {this.GetType().Name}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// (вызывается только если объект активен):
/// Эта функция вызывается сразу после включения объекта.
/// Это происходит при создании образца MonoBehaviour,
/// например, при загрузке уровня или был вызван
/// GameObject с компонентом скрипта.
2024-10-05 08:54:55 +03:00
/// </summary>
private void OnEnable ( )
{
print ( $"OnEnable {this.GetType().Name}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Вызывается до обновления первого кадра(first frame)
/// только если скрипт включен.
2024-10-05 08:54:55 +03:00
/// </summary>
private void Start ( )
{
print ( $"Start {this.GetType().Name}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Зачастую случается, что FixedUpdate вызывается чаще чем Update.
/// FU может быть вызван несколько раз за кадр, если FPS низок
/// и функция может быть и вовсе не вызвана между кадрами, если FPS высок.
/// В с е физические вычисления и обновления происходят сразу после FixedUpdate.
/// При применении расчётов передвижения внутри FixedUpdate,
/// вам не нужно умножать ваши значения на Time.deltaTime.
/// Потому что FixedUpdate вызывается в соответствии с надёжным таймером,
/// независящим от частоты кадров.
/// Другие методы физики:
2024-10-05 08:54:55 +03:00
/// yield WaitForFixedUpdate
/// OnTriggerXXX
/// OnCollisionXXX
/// </summary>
private void FixedUpdate ( )
{
if ( ShowFixedUpdateString = = true )
Debug . Log ( $"FixedUpdate {this.GetType().Name} time: {PoleK++}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Отправляется, когда мышь входит в элемент.
2024-10-05 08:54:55 +03:00
/// </summary>
private void OnMouseOver ( )
{
if ( ShowMouseEventString = = true )
Debug . Log ( $"OnMouseOver {this.GetType().Name}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Отправляется, когда мышь входит в элемент или один из е г о потомков.
2024-10-05 08:54:55 +03:00
/// </summary>
private void OnMouseEnter ( )
{
if ( ShowMouseEventString = = true )
Debug . Log ( $"OnMouseEnter {this.GetType().Name}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Вызывается, когда пользователь щелкнул Collider и все еще удерживает мышь.
2024-10-05 08:54:55 +03:00
/// </summary>
private void OnMouseDrag ( )
{
if ( ShowMouseEventString = = true )
Debug . Log ( $"OnMouseDrag {this.GetType().Name}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Отправляется, когда пользователь нажимает кнопку мыши
/// в области GUIElement или Collider
2024-10-05 08:54:55 +03:00
/// </summary>
private void OnMouseDown ( )
{
if ( ShowMouseEventString = = true )
Debug . Log ( $"OnMouseDown {this.GetType().Name}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Отправляется, когда пользователь отпускает кнопку мыши.
2024-10-05 08:54:55 +03:00
/// </summary>
private void OnMouseUp ( )
{
if ( ShowMouseEventString = = true )
Debug . Log ( $"OnMouseUp {this.GetType().Name}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Вызывается, когда мышь больше не находится над Collider.
2024-10-05 08:54:55 +03:00
/// </summary>
private void OnMouseExit ( )
{
if ( ShowMouseEventString = = true )
Debug . Log ( $"OnMouseExit {this.GetType().Name}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Вызывается раз за кадр. Это главная функция для обновлений кадров.
2024-10-05 08:54:55 +03:00
/// </summary>
private void Update ( )
{
if ( ShowUpdateString = = true )
Debug . Log ( $"Update {this.GetType().Name} time: {Time.deltaTime}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Game Logic - строго после Update и перед LateUpdate
/// yield return null - Сопрограмма продолжит выполнение, после того, как все Update функции были вызваны в следующем кадре.
/// yield return new WaitForSeconds() - Продолжает выполнение после заданной временной задержки, и после все Update функций, вызванных в итоговом кадре.
/// yield WWW - продолжает выполнение после завершения WWW-загрузки.
/// yield StartCoroutine() - сцепляет сопрограмму, и будет ждать, пока не завершится сопрограмма MyFunc.
2024-10-05 08:54:55 +03:00
/// </summary>
/// <returns></returns>
private IEnumerator ShowGameLogic ( )
{
yield return new WaitForSeconds ( 1f ) ;
yield return StartCoroutine ( ShowGameLogic ( ) ) ;
print ( PoleI ) ;
yield return null ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// LateUpdate вызывается раз в кадр, после завершения Update.
/// Любые вычисления произведённые в Update будут уже выполнены на момент начала LateUpdate.
/// Часто LateUpdate используют для преследующей камеры от третьего лица.
/// Если вы перемещаете и поворачиваете персонажа в Update,
/// вы можете выполнить все вычисления перемещения и вращения камеры в LateUpdate.
/// Это обеспечит то, что персонаж будет двигаться до того, как камера отследит е г о позицию.
2024-10-05 08:54:55 +03:00
/// </summary>
private void LateUpdate ( )
{
if ( ShowLateUpdateString = = true )
Debug . Log ( $"LateUpdate {this.GetType().Name} time: {Time.deltaTime}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Scene rendering - строго после выполнения LateUpdate
/// Вызывается один раз для каждой камеры, если объект в поле зрения.
2024-10-05 08:54:55 +03:00
/// </summary>
private void OnWillRenderObject ( )
{
if ( ShowSceneRenderingString = = true )
Debug . Log ( $"OnWillRenderObject {this.GetType().Name}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Вызывается до того, как камера отсечёт сцену. Отсечение определяет,
/// какие объекты будут видны в камере. OnPreCull вызывается прямо перед тем,
/// как начинается отсечение.
2024-10-05 08:54:55 +03:00
/// </summary>
private void OnPreCull ( )
{
if ( ShowSceneRenderingString = = true )
Debug . Log ( $"OnPreCull {this.GetType().Name}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Вызывается тогда, когда объект становится видимым любой камере.
2024-10-05 08:54:55 +03:00
/// </summary>
private void OnBecameVisible ( )
{
if ( ShowSceneRenderingString = = true )
Debug . Log ( $"OnBecameVisible {this.GetType().Name}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Вызывается тогда, когда объект становится невидимым любой камере.
2024-10-05 08:54:55 +03:00
/// </summary>
private void OnBecameInvisible ( )
{
if ( ShowSceneRenderingString = = true )
Debug . Log ( $"OnBecameInvisible {this.GetType().Name}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Вызывается перед тем, как камера начнёт рендерить сцену.
2024-10-05 08:54:55 +03:00
/// </summary>
private void OnPreRender ( )
{
if ( ShowSceneRenderingString = = true )
Debug . Log ( $"OnPreRender {this.GetType().Name}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Вызывается, после того, как все обычные рендеры сцены завершатся.
/// Вы можете использовать класс GL или Graphics.DrawMeshNow,
/// чтобы рисовать пользовательскую геометрию в данной точке.
2024-10-05 08:54:55 +03:00
/// </summary>
private void OnRenderObject ( )
{
if ( ShowSceneRenderingString = = true )
Debug . Log ( $"OnRenderObject {this.GetType().Name}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Вызывается после того, как камера завершит рендер сцены.
2024-10-05 08:54:55 +03:00
/// </summary>
private void OnPostRender ( )
{
if ( ShowSceneRenderingString = = true )
Debug . Log ( $"OnPostRender {this.GetType().Name}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Вызывается после завершения рендера сцены,
/// для возможности пост-обработки изображения экрана.
2024-10-05 08:54:55 +03:00
/// </summary>
2025-05-12 01:29:30 +03:00
/// <param name="source">текущий экран</param>
/// <param name="destination">куда сохранить</param>
2024-10-05 08:54:55 +03:00
private void OnRenderImage ( RenderTexture source , RenderTexture destination )
{
if ( ShowSceneRenderingString = = true )
Debug . Log ( $"OnRenderImage {this.GetType().Name}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Используется для отрисовки гизмо в окне Scene View в целях визуализации.
/// Только в Editor Unity
2024-10-05 08:54:55 +03:00
/// </summary>
private void OnDrawGizmos ( )
{
if ( ShowSceneRenderingString = = true )
Debug . Log ( $"OnDrawGizmos {this.GetType().Name}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Вызывается несколько раз за кадр и отвечает за элементы интерфейса (GUI).
/// Сначала обрабатываются события макета и раскраски,
/// после чего идут события клавиатуры/мышки для каждого события.
2024-10-05 08:54:55 +03:00
/// </summary>
private void OnGUI ( )
{
if ( ShowSceneRenderingString = = true )
Debug . Log ( $"OnGUI {this.GetType().Name}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// (Работает один раз)
/// Вызывается также после yield WaitForEndFrame
/// Отправляется всем GameObjects, когда приложение приостанавливается.
2024-10-05 08:54:55 +03:00
/// </summary>
/// <param name="pause"></param>
private void OnApplicationPause ( bool pause )
{
Debug . Log ( $"OnApplicationPause {pause} {this.GetType().Name}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Вызывается, когда объект отключается или становится неактивным.
2024-10-05 08:54:55 +03:00
/// </summary>
private void OnDisable ( )
{
Debug . Log ( $"OnDisable {this.GetType().Name}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Вызывается для всех игровых объектов перед тем,
/// как приложение закрывается. В редакторе вызывается тогда,
/// когда игрок останавливает игровой режим.
/// В веб-плеере вызывается по закрытия веб окна.
2024-10-05 08:54:55 +03:00
/// </summary>
private void OnApplicationQuit ( )
{
Debug . Log ( $"OnApplicationQuit {this.GetType().Name}" ) ;
}
/// <summary>
2025-05-12 01:29:30 +03:00
/// Эта функция вызывается после всех обновлений кадра
/// в последнем кадре объекта, пока он ещё существует
/// (объект может быть уничтожен при помощи Object.Destroy или при закрытии сцены).
2024-10-05 08:54:55 +03:00
/// </summary>
private void OnDestroy ( )
{
Debug . Log ( $"OnDestroy {this.GetType().Name}" ) ;
}
}