Компоненты

Добавлен , опубликован
И вот, зайдя в юнити и прочитав пару статей, вы обращаете внимание на панельку под названием 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
9
10 лет назад
Отредактирован AsagiriGen
2
Хорошая статья, отдельно спасибо за иерархии.
Хотелось бы добавить для читателей, что кол-во вызовов Update() в секунду(читай - FPS) может розниться, в то время как кол-во вызовов FixedUpdate() в секунду будет одно и то же, т.е. фиксировано.
0
26
10 лет назад
0
Это не FixedUpdate вызывается каждый раз, когда просчитывается физика, это физика просчитывается каждый раз, когда вызывается FixedUpdate. Сам по себе, FixedUpdate - просто повторяющееся с определенной периодичностью событие. Насчет упоминания инспектора промолчу, у меня и так уже был спор с кем-то насчет этого в каком-то ресурсе проекта.
0
24
10 лет назад
0
lentinant:
Насчет упоминания инспектора промолчу, у меня и так уже был спор с кем-то насчет этого в каком-то ресурсе проекта.
Со мной :)
Чтобы оставить комментарий, пожалуйста, войдите на сайт.