Unity 3D: Компоненты

» Раздел: Программирование

И вот, зайдя в юнити и прочитав пару статей, вы обращаете внимание на панельку под названием Inspector.
Каждое подменю - это так называемый компонент. Что это? Вкратце - кусочки, из которых складывается поведение объекта, его положение в мире и все-все-все. Так, например, компонент Collider дает предмету осязаемую форму, на которую смогут реагировать другие объекты, у которых есть компонент, ответственный за физику - RigidBody, не говоря о Transform, который позволяет нашему предмету иметь в мире положение, масштаб и поворот. Вкратце говоря, если Game Object - предмет, то компоненты - его свойства.
Важно понимать, что компонент - любой класс, наследуемый от Component.
На этих кирпичиках и строится мир в юнити. Попробуем написать собственный компонент.
Дважды кликнув по выбранному в поле Script файлу, или найдя этот файл в папке проекта, мы попадем в нашу рабочую среду, где и будем творить.
По умолчанию это MonoDevelop, но вы всегда можете сменить на другой в Edit/Preferences/ExternalTools.
Создадим новый скрипт пройдя в меню Assets/Create/C#Script. Новый скрипт, для примера, мы назовем "SomeComponent".
И вот мы смотрим на код.
using UnityEngine;
using System.Collections;

public class SomeComponent : MonoBehaviour {

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}
Разберем этот код. (Важно - имя класса обязательно должно совпадать с именем файла).
Замечу, что функции Start, Update и FixedUpdate есть только в тех компонентах, что наследуются от MonoBehaviour.
MonoBehaviour - это компонент, описывающий поведение объекта. Отсюда и слово "Behaviour". Скажем, это может быть поведение юнита, здания, игрока, двери или еще какой другой оказии в игровом мире. Чтобы обеспечить взаимодействие с миром и сделаны специальные методы, которые позволяют нам отслеживать окружающие изменения.
Start - вызывается при появлении этого компонента на нашей сцене (Если был там с самого начала - запустится при запуске сцены), появился ли он во время игры вместе с некоторым новым объектом или был добавлен уже к существующему.
Update - этот метод вызывается каждый раз при перерисовке картинки на экране. Замечу, что добавив слово Fixed вы получите...
FixedUpdate - метод, вызывающийся каждый раз, при каждом просчете физики.
Немного отвлечемся. Вы правильно поняли, физика и графика идут раздельно и считаются с разными периодами. Это позволяет, к примеру, полностью останавливая просчет физики, не трогать ничего, связанного с графикой.
Это основные, общие для всех компонентов функции, но не единственные.
» Пример
	// Update is called once per frame
	void Update () {
              transform.position = transform.position + Vector3.up;	
	}
Так например этот код будет каждый раз при перерисовке графики поднимать наш объект на 1 единицу вверх.
Важно заметить, что все публичные переменные, объявленные в этом классе, автоматически появляются в подменю, где их можно будет изменить на те значения, какие будут нужны при запуске сцены, если вы конечно не написали кастомное, хотя, вряд ли вы тогда читали бы эту статью.

Просмотров: 2 002

Это сообщение удалено
GeneralElConsul #2 - 4 года назад (отредактировано ) 2
Хорошая статья, отдельно спасибо за иерархии.
Хотелось бы добавить для читателей, что кол-во вызовов Update() в секунду(читай - FPS) может розниться, в то время как кол-во вызовов FixedUpdate() в секунду будет одно и то же, т.е. фиксировано.
lentinant #3 - 4 года назад 0
Это не FixedUpdate вызывается каждый раз, когда просчитывается физика, это физика просчитывается каждый раз, когда вызывается FixedUpdate. Сам по себе, FixedUpdate - просто повторяющееся с определенной периодичностью событие. Насчет упоминания инспектора промолчу, у меня и так уже был спор с кем-то насчет этого в каком-то ресурсе проекта.
RSQR #4 - 4 года назад 0
lentinant:
Насчет упоминания инспектора промолчу, у меня и так уже был спор с кем-то насчет этого в каком-то ресурсе проекта.
Со мной :)