Developedia
Developedia
Az OnValidate metódus

Az OnValidate metódus

Az OnValidate metódus a Start-hoz hasonlóan egy speciális Unity MonoBehaviour üzenetmetódus.

icon
MonoBehaviour message method / üzenetmetódus

Amikor egy MonoBehaviour osztályt írunk, akkor adhatunk hozzá speciális, előre meghatározott nevű és paraméterezésű metódusokat. Ezeket a Unity automatikusan meghívja (lefuttatja / végrehajtja) egyszer vagy többször bizonyos események hatására. Ez minden egyes komponens példányra megtörténik, ami betöltött Scene-ben szerepel és be van kapcsolva.

Az ilyen metódusokat nevezzük MonoBehaviour üzenet- vagy eseménymetódusoknak, mivel általuk küld a Unity üzenetet a kódunk felé egy esemény megtörténtéről.

Példák:

void Start() { /* A komponens létrejöttekor fut le Play módbab */ }
void Update() { /* Minden képfrissítés előtt fut le Play módbab */ }

Ahogy például a Start metódus akkor fut le amikor a komponens létrejön a játékban, az OnValidate metódus mindig akkor fut le, amikor:

  • A Unity újra fordítja a kódunkat (mert változtatunk rajta.) vagy
  • Az Inspector felületen változtatunk a komponens egy [SerializeField] változóján.

A Start vagy Update metódus mindig csakis Play módban fut le. (A játék futása közben),

Ezzel szemben az OnValidate-et a Play módon kívül is meg fogja hívni a Unity.

Az OnValidate tisztán egy fejlesztői eszköz és sosem fog lefutni a végleges build-ben. Ennek oka, , hogy az OnValidate arra szolgál, hogy előzetes beállításokat végezzünk benne a fejlesztés alatt és nem, az hogy futás közben végezzen műveleteket.

Nézzünk egy példát arra, milyen automatikus műveleteket végezhet az OnValidate:

Ez csak néhány példa volt. Ezeken kívül tetszőleges mennyiségű egyéb felhasználás is elképzelhető. Lényeg, hogy a OnValidate-ben mindig valamiféle fejlesztői automatizációt végzünk.

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
[SerializeField] float someNumber = 1;
[SerializeField] Camera camera;
[SerializeField] Collider collider;
    
void OnValidate()
{
	// Biztosítjuk, hogy egy beállítás változó nem vesz fel bizonyos tiltott értékeket.
	if(someNumber > 10)     // someNumber változó értéke nem lehet 10-nél nagyobb
		someNumber = 10;      
	        
	if(camera == null)      // Ha nincs referenciánk a kamerára
		camera = Camera.main; // bekötjük
	
	if (camera!=null && camera.orthographic == false)  // Ha a Camera nem ortografikus 
		camera.orthographic = true;                      // Átállítjuk
	        
	if(collider == null)                     // Ha nincs referenciánk a colliderünkre,
		collider = GetComponent<Collider>();   // megtaláljuk és bekötjük
}