Unity3D C#


Справка: Manual/ScriptingSection (En/Ru)
Cправка по GUI: GUIScriptingGuide
Руководства: Scripting C# (En + video)

Книги Ru:  ( https://cloud.mail.ru/public/5utN/45c8MoX16 )
      Unity в действии.   Джозеф Хокинг
      Искусство создания сценариев в Unity.   Алон Торн
      Unity Game Development Essentials.  Ru
      Unity и C# Геймдев от идеи до реализации.  2-е изд.

Ссылки на допресурсы:
      Памятка одного товарища >>>
      Гоша Дударь: Уроки C# под Unity 5 для начинающих >>> (что-то подсмотреть можно, он обычно очень поверхностно)
      Riptutorial Unity3D >>>

    [Tproger]
      Создание Minecraft на Unity3D Часть1 и Часть2
      Как быстро написать игру для Android на Unity >>>
      Самый простой способ сделать игру на Unity 5 >>>
      Как выполнять сохранение и загрузку игры в Unity >>>
      Пишем сапёр на Unity Часть1 Часть2 Часть3

   [Habr]
      Погружение в скрипты игрового движка Unity3d:  Часть1 и Часть2
      Про создание платформера на Unity. Часть1 и Часть2
      Структура кода в Unity3d - личное мнение и пара трюков >>>
      Unity3d. Уроки от Unity 3D Student: В00-В03, В04-В08, В09-В12, В13-В16   (unity3dstudent)
      Порядок событий в Unity3D >>>
      События C# по-человечески >>>

   [YouTube]
         loftblog: GameDev c Unity3D (Сергей Мелюков) >>>
         AndroidHelper: [C#] для Unity >>>
         Unity RTS (стратегия в Unity) - Чайные вечера >>>
         Microsoft Developer Russia: Создание платформера Unity >>>
         Skillbox: Как создать игру на C# и Unity.  Часть 1  Часть 2
         ExtremeCode: C# в Unity:
               #0. Компонентный подход
               Жизненный цикл компонента и события
               Взаимодействие компонентов
         Курсы ITVDN по Unity >>>

   [RuTracker]
         Плагин для Хром  >>> (rutracker.wiki)





Иерархия классов:

Object  - базовый класс объектов

     GameObject  - базовый класс для всех объектов на сценах Unity

     Component  - базовый класс для всех компонентов внедряемых в объекты Unity

          Collider - базовый класс для всех коллайдеров

          Behaviour  - поведение компонентов

               MonoBehaviour  - базовый класс скрипта игровых объектов Unity
                    InvokeRepeating  - циклический таймер

                    UIBehaviour
                          BaseRaycaster  - Базовый класс для всех райкастеров (лучей)
                          EventSystem  - обработку событий в сцене Unity
                                                    (jбработчики входа, райкастинга и отправки событий)

          Transform  - Положение, вращение и масштаб объекта
                position - абсолютная позиция
                rotation  - абсолютный поворот
                Translate  - смещение
          Rigidbody - компонент имитации физики
                AddForce - воздействие
                velocity  - скорость
                rb.velocity = new Vector3( Input.GetAxis("Horizontal"),  rb.velocity.y,  rb.velocity.z );

     ScriptableObject  - класс для объектов, которые не прикреплены к игровым объектам Unity


Vector3
      MoveTowards  - перемещение, от текущей точки к целевой точки по прямой.


Physics - Глобальные физические свойства и вспомогательные методы


Quaternion - вращение
      identity - не применять поворот, оставить прежним



Input - Интерфейс системы ввода.



Time - информация о времени в игре
     Time.deltaTime  - в время в секундах, которое потребовалось для отрисовки
                                    последнего кадра
     Time-time  -  время в секундах с начала игры


IPointerClickHandler  - интерфейс для получения обратных вызовов OnPointerClick (получение события клик и точки) GameDev c Unity3D часть 4 (Сергей Мелюков)






Руководство по скриптингу Unity

1. Создание и Использование Скриптов

Вывод в консоль:
   Debug.Log("_");   // Debug.Log
или
   print ("_");             // MonoBehaviour.print



2. Переменные и Inspector

Модификаторы доступа C# (на metanit.com):
   public
   private
   protected

Показать закрытые свойства класса в Inspector:
   [SerializeField]     // SerializeField

НЕ показывать открытые свойства класса в Inspector:
   [System.NonSerialized]     // NonSerializable



3. Компоненты. Обращение к другим объектам

Получение компонента:
    GetComponent<Rigidbody>();   // GameObject.GetComponent
    transform - сокращенно для  GetComponent<Transform>();

Приведение типов, различные формы записи:
    Rigidbody rigi = gmObj.GetComponent<Rigidbody>();
    Rigidbody rigi = gmObj.GetComponent( "Rigidbody" ) as Rigidbody;
    Rigidbody rigi = gmObj.GetComponent( typeof(Rigidbody) ) as Rigidbody;


Получение ссылки на конкретный объект:
   - создаем публичную ссылку на объект:  public GameObject myPlayer;
   - в Inspector перетаскиваем нужный объект в поле: "myPlayer"

Поиск объектов по имени:
     GameObject.Find("Gun");    // GameObject.Find

Поиск потомков (вложенных объектов) по имени:
     transform.Find("Monster/Arm");    // Transform.Find

Поиск объектов по тегу:
     GameObject.FindWithTag("Player");   // GameObject.FindWithTag

Поиск всех объектов по тегу (коллекция):
     GameObject.FindGameObjectsWithTag("Enemy");  // GameObject.FindGameObjectsWithTag



4. Обработчики событий

Скрипты наследуются от MonoBehaviour поэтому доступны следующие обработчики событий:

     Awake - наступает после инициализации всех объектов;
                   выполняется в любом случае, включен текущий Скрипт или нет;
                   (не для установки связей между скриптами, используйте Start)

     Start - наступает в первом кадре, при включенном текущем Скрипте;
                можно установить связи с другими скриптами.

     Update - наступает каждый кадр;
                   (время (сек) прошедшее от предыдущего кадра - Time.deltaTime)

     FixedUpdate - фиксированные по времени вызовы, обычно 0,02сек (TimeManager)


Группа событий OnCollision - возникают при соприкосновении текущего объекта с другим (соприкосновение компонентами rigidbody/collider):

     OnCollisionEnter - началось соприкосновение   (OnCollisionEnter2D для 2D).
   
     OnCollisionExit - прекратилось соприкосновение   (OnCollisionExit2D для 2D).

     OnCollisionStay - наступает каждый кадр пока collider/rigidbody соприкасается c другим
                                   rigidbody/collider   (OnCollisionStay2D для 2D физики).


     OnParticleCollision - наступает, когда частица попадает в коллайдер



Группа событий OnTrigger - возникают при вхождении коллайдера текущего объекта в триггер-коллайдер другого объекта:

    OnTriggerEnter - наступает в начальный момент вхождения
                                  (OnTriggerEnter2D для 2D).

    OnTriggerExit - наступает при выходе
                               (OnTriggerExit2D для 2D).

    OnTriggerStay - наступает каждый кадр пока идет вхождение  (OnTriggerStay2D для 2D).


Группа событий OnMouse - возникают при взаимодействии мыши с GUIElement или коллайдером:

    OnMouseDown - наступает при нажатии кнопки мыши над GUIElement или коллайдером

    OnMouseDrag - наступает каждый кадр пока есть нажатие над GUIElement или коллайдером

    OnMouseUp - наступает отжатии кнопки мыши над GUIElement или коллайдером

    OnMouseEnter - наступает при начальном попадании указателя мыши
                                на GUIElement или коллайдер

   OnMouseExit - наступает при выходе указателя мыши с GUIElement или коллайдера

   OnMouseOver - наступает каждый кадр пока указатель мыши находится над GUIElement
                               или коллайдером

   OnMouseUpAsButton - наступает только тогда, когда кнопка мыши отпущена над тем же
GUIElement или коллайдером, над которым была нажата кнопка мышь


     OnGUI - наступает при взаимодействии с пользовательскими элементами (контроллами)
                    (GUI - GUIScriptingGuide)




5. Время и кадры



6. Создание и уничтожение игровых объектов (GameObjects)

Создание нового объекта на основе префаба или существующего объекта:

     Instantiate(prefab);                   // Instantiate(ссылка на префаб или объект)
   или
     Instantiate(prefab,  new Vector3(i * 2.0f, 0, 0),  Quaternion.identity);


Создание примитивов CreatePrimitive - Sphere, Capsule, Cylinder, Cube, Plane, Quad:

    GameObject cube = GameObject.CreatePrimitive( PrimitiveType.Cube );


Уничтожение - Destroy:

    Destroy (gameObject);   - удаление объекта по ссылке

    Destroy (this);    - удаление текущего скрипта

    Destroy (rigidbody);   - удаление компонента

    Destroy (gameObject, 5);   - удаление объекта с задержкой 5 сек



7. Coroutines

8. Порядок выполнения функций событий



9. События - UnityEvents

UnityEventBase  - базовый абстрактный класс UnityEvent
UnityEvent    - событие без аргументов

События c аргументами:
UnityEvent<T0>UnityEvent<T0,T1>UnityEvent<T0,T1,T2>UnityEvent<T0,T1,T2,T3>

EventTrigger  - все события



10. Вектора.  Понимание векторной арифметики - VectorArithmetic























Комментарии

  1. Автор, огромнейшее тебе спасибо!

    ОтветитьУдалить
  2. Спасибо, вы сэкономили мне кучу времени. Зная эти темы я смогу создавать простые игры?

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения из этого блога

Ответы по промбезопасности. А.1. ПБП 115.15 Подготовка и аттестация руководителей и специалистов организаций по основам промышленной безопасности

Ответы по промбезопасности. Б.2.23 ПБ 1223.8 Подготовка и аттестация руководителей и специалистов организаций, эксплуатирующих сосуды, работающие под давлением, на опасных производственных объектах

Переполнение в millis(), которого нет. Ардуино