Egy MonoBehaviour felépítése
using UnityEngine;
public class TestComponent : MonoBehaviour
{
// Az alábbiak egyike sem kötelező.
// A legtöbb MonoBehaviour nem tartalmaza a lentiek közül az összeset.
// SerializeField referenciák -----------------------------------
// Milyen objektumokat szeretnénk használni a komponensben?
[Header("References")] // Fejléc
[SerializeField] GameObject gameObjectReference;
[SerializeField] Camera cameraReference;
[SerializeField] Collider colliderReference;
[SerializeField] ScriptableObject scriptableObjectReference;
// ...
// SzerialiseField beállítások -----------------------------------
// Milyen értékekkel szeretnénk használni a komponenst?
// Érdemes kezdőbeállítást adni ezen field-eknek. Ezek módosíthatók az Editor-ban.
[Header("Settings")] // Fejléc
[SerializeField] int intSetting = 1;
[SerializeField] string stringSetting = "Some text";
[SerializeField] Color colorSetting = Color.white;
[SerializeField, Range(-1f,1f)] float numberSettingInARange;
[SerializeField, Min(0)] int numberSettingWithMimumValue;
//...
// Privát mezők -----------------------------------
// Ezek nem beállítások, hanem a komponens belső működéséhez szükséges változók.
// Állapotukat megőrzik, amíg a komponens létezik.
float privateFloatValue;
bool privateBoolValue;
Vector3 privateVector3Value;
//...
// Publikus és privát property-k -----------------------------------
float PrivateFloatValue
{
get => privateFloatValue;
set => privateFloatValue = Mathf.Clamp01(value);
}
public bool PublicBoolValue => intSetting >= 0;
//...
// Automatizált beállítások -----------------------------------
// Ezek a kód csak az Editor-ban fut le, nem a játék futása alatt.
void OnValidate()
{
// Bekötjük a referenciákat, ha nem léteznek.
if (colliderReference == null)
colliderReference = GetComponent<Collider>();
// Ellenőrizzük, hogy a beállítások érvényesek-e.
// Ha nem, akkor javítsuk őket!
if (intSetting > 100)
intSetting = 100;
}
// Unity üzenetmetóduok -----------------------------------
void Start() { }
void Update() { }
void FixedUpdate() { }
// Ennek teljes listáját látsd lentebbi kódrészletben...
// Publikus metódusok-k -----------------------------------
public void MethodToCallFromOutside()
{
// It végezzük el a műveletet.
MethodToCallFromInsideOnly();
}
// Private metódusok-k -----------------------------------
void MethodToCallFromInsideOnly()
{
// It végezzük el a műveletet.
}
}
Fontos MonoBehaviour üzenet metódusok
public class MonoBehaviourLifeCycleMethods : MonoBehaviour
{
// Unity MonoBehaviour üzenet metódusok (Van ezen kívül több is...)
// Ezeket a Unity automatikusan hívja bizonyos események hatására
// a Scene-ben lévő komponenseken.
void Awake() {} // Ha a GameObject létrejön
// Minden Awake garantáltan lefut az első Start lefutása előtt
void OnEnable() {} // Ha a GameObject aktiválódik
// Minden OnEnable garantáltan lefut az első Start lefutása előtt
// Awake és OnEnable metódusban nem javasolt más skriptek public metódusait hívni.
// (Lehet, hogy valami még nem lett inicializálva) Ezt inkább végezzük Start-ban.
void Start() {} // Ha a GameObject elindul
// Minden Start garantáltan lefut az első Update lefutása előtt
// It hívhatunk más szkripteket is.
void OnDisable() {} // Ha a GameObject deaktiválódik
void OnDestroy() {} // Ha a GameObject törlődik
// Ciklikus:
void Update() {} // Minden képernyőfrissítés előtt lefut
void FixedUpdate() {} // Rögzített időközönként lefut
void LateUpdate() {} // Minden képernyőfrissítésnél lefut
// Minden Update lefut az első LateUpdate lefutása előtt
// Egyszeri (nem folyamatos) input műveleteket (mint pl.: GetKeyDown)
// mindig az Update-ben vagy LateUpdate-ben kérj le, ne a FixedUpdate-ben!
// Ha egy váltzás sebességét állítod (pl.: Gyorsuló mozgás)
// Mindig használj FixedUpdate-et!
// Pozíció módosítást javasolt az Update-ben végezni.
// Ütközés és Trigger-ek 3D-ben
void OnTriggerEnter(Collider other) {} // Ha egy Trigger-rel ütközik
void OnTriggerStay(Collider other) {} // Ha egy Trigger-ren belül maradt
void OnTriggerExit(Collider other) {} // Ha egy Trigger-ből kilép
void OnCollisionEnter(Collision other) {} // Ha egy Collider-rel ütközi
void OnCollisionStay(Collision other) {} // Ha egy Collider-en belül marad
void OnCollisionExit(Collision other) {} // Ha egy Collider-ből kilép
// Ütközés és Trigger-ek 2D-ben
void OnTriggerEnter2D(Collider2D other) {} // Ha egy 2D Trigger-rel ütközik
void OnTriggerStay2D(Collider2D other) {} // Ha egy 2D Trigger-ren belül maradt
void OnTriggerExit2D(Collider2D other) {} // Ha egy 2D Trigger-ből kilép
void OnCollisionEnter2D(Collision2D other) {} // Ha egy 2D Collider-rel ütközi
void OnCollisionStay2D(Collision2D other) {} // Ha egy 2D Collider-en belül marad
void OnCollisionExit2D(Collision2D other) {} // Ha egy 2D Collider-ből kilép
// Egér
void OnMouseEnter(){} // Egér fölé ért
void OnMouseOver(){} // Egér fölötte áll
void OnMouseExit(){} // Egér elhagyta
void OnRightMouseDown(){} // Egér rátattintott
void OnRightMouseDrag(){} // Egér odébbhúzta
void OnRightMouseUp(){} // Egér felengedte
// A "Stay"-t tartalmazó metódusok a FixedUpdate-ekkel együtt hívódik meg.
// Cask editor metódusok:
void OnValidate() { } // Ha az Inspector beállításait vagy a kódot megváltoztatjuk
void OnDrawGizmos() { } // Itt tudunk Gizmokat rajzolgatni
void OnDrawGizmosSelected() { } // Itt tudunk Gizmokat rajzolgatni,
// amikor az objektum ki van választva
}