Eseménykezelés
- Publish-Subscribe modell
- Broadcast események megadhatók a feliratkozott objektumokhoz.
- https://learn.unity.com/tutorial/events-uh#
Példa
- Hozzunk létre egy színteret, és rakjunk bele egy objektumot középre!
- Definiáljuk az alábbi
EventManager
szkriptet!
public class EventManager : MonoBehaviour
{
public delegate void ClickAction();
public static event ClickAction OnClicked;
void OnGUI()
{
if (GUI.Button(new Rect(Screen.width / 2 - 100, 5, 200, 30), "Rotate!"))
{
if (OnClicked != null) {
Debug.Log("Rotate on click!");
OnClicked();
}
}
}
}
- Adjuk hozzá a szkriptet a kamerához!
- Definiáljunk egy
Spinner
nevű szkriptet a következő adattagokkal és metódusokkal!
public Rigidbody rigidbody;
void Start()
{
rigidbody = GetComponent<Rigidbody>();
}
void OnEnable()
{
EventManager.OnClicked += Spin;
}
void OnDisable()
{
EventManager.OnClicked -= Spin;
}
void Spin()
{
Debug.Log("Rotate!");
Vector3 axis = new Vector3(10, 20, 30);
rb.AddTorque(axis, ForceMode.Force);
}
- Adjuk hozzá a
Spinner
szkriptet a kockához! - Indítsuk el a színteret és próbáljuk ki!
- Adjuk meg a forgás nagyságát szerkesztőből állítható paraméterként!
Raycasting
A sugarak használata gyakran hasznos lehet. Rajzoltassunk ki egy sugarat az alábbi kódrésszel!
Vector3 origin = transform.position;
Vector3 direction = transform.forward * 10;
Debug.DrawRay(origin, direction, Color.red);
A sugárral való ütközést a következőképpen lehet vizsgálni:
RaycastHit hit;
...
if (Physics.Raycast(origin, direction, out hit)) {
Debug.Log(hit);
}
Az eltalált objektum a következőképpen kérdezhető le:
hit.collider.gameObject
Példa
- Készítsünk egy színteret, amelybe elhelyezünk egy objektumot, amivel célozni szeretnénk!
- Rajzoltassuk ki, hogy merrefelé célzunk (például zöld színnel)!
- Oldjuk meg, hogy az egér segítségével lehessen célozni!
- Helyezzünk a színtérbe objektumokat!
- Az eltalált objektumoknak változtassuk a színét pirosra!
Speciális bemenetek
- https://docs.unity3d.com/Manual/xr_input.html
- Vizsgáljuk meg, hogy egy VR projekt esetében hogyan jelennek meg a bemenetek (amennyiben a rendszer erőforrásai megengedik)!
Interakciók
Példa
- Hozzunk létre egy prefab-ot, amely egy érme!
- Állítsuk be az anyagjellemzőket, és a
Time.fixedTime
segítségével oldjuk meg, hogy az érme fel-le mozogjon! - Hozzunk létre egy zöld síkot, és véletlenszerű pozíciókba helyezzük le az érméket!
- Hozzunk létre egy piros objektumot, ami a karakterünket reprezentálja!
- Mozgassuk az objektumot billentyűk és/vagy egér segítségével!
- Oldjuk meg, hogy az érméket fel lehessen szedni!
Állapotgép modell
Játékokban a jellegzetes viselkedés állapotok:
- járőrözés (patrolling),
- bolyongás,
- gyűjtögetés,
- támadás,
- menekülés.
Egyszerű NPC készítése
- Non Player Character
Példa
- Adjunk a színterünkhöz egy karaktert (amely az NPC lesz)!
- Oldjuk, hogy véletlenszerűen bolyongjon egy síkon!
- Jelöljünk ki számára célokat, melyekhez bizonyos idő eltelte után odamegy!
- Jelezzük egy objektum színével vagy pozíciójával, hogy éppen milyen állapotban van!