Developedia
Developedia
Unity Puska 2 - A MonoBehaviour

Unity Puska 2 - A MonoBehaviour

Egy MonoBehaviour felépítése

Fontos MonoBehaviour üzenet metódusok

Logo

Főoldal

Blog

Elmélet

3D Studio

Adatvédelmi nyilatkozat

GY.I.K.

Házirend

Szerző: Marosi Csaba / marosi.csaba@3d-studio.hu

DiscordGitHubLinkedIn
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.
	}
}
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
}