Triggery
Triggery
Triggery jsou jeden z nástrojů, jak řídit interakci mezi objekty. Je to speciální případ collideru, který umí zachytávat, jestli do jeho oblasti nějaký objekt vstoupil, nachází se v něm nebo z něj odešel a reagovat na tyto údálosti.
Jak ho vytvořit?
Triggerem se může stát jakýkoliv collider, u kterého zaškrtneme v inspektoru Is Trigger
. Poté, co z collideru uděláme trigger, tak už přestane fyzicky kolidovat s ostatními objekty a bude to spíše jakási zóna.
Následně pro daný objekt vytvořímě script komponentu ve které můžeme definovat 3 funkce, které budou řídit reakci při interakci objektů s naším triggerem. Jako referenci na kolidující objekt dostaneme přes parametr funkce Collider other
.
void OnTriggerEnter(Collider other){}
void OnTriggerStay(Collider other){}
void OnTriggerExit(Collider other){}
Pro více informací Dokumentace
Příklad
Jako příklad si ukážeme lupu - Magnifier, která nám objekt při vstupu zvětší a při výstupu opět zmenší.
Začneme tím, že si vytvoříme objekt, který bude trigger reprezentovat, například Cube. Right clickem v Hierarchy: 3D Object > Cube. V Inspectoru ještě odklikneme na off Mesh Renderer
komponentu, abychom měli náš trigger průhledný.
V inspektoru v komponentě Box Collider zaškrtneme Is Trigger
jako v obrázku výše. Následně vytvoříme skript komponentu - vybereme v Hierarchy naší Cube a v Inspectoru klikneme na Add Component
a napíšeme název skriptu - v našem případě Magnifier > New Script
> Create and Add
.
Následně nadefinujeme 3 zmíněné metody a jejich funkcionality - při vstupu(OnTriggerEnter
) zvětší a při výstupu opět zmenší(OnTriggerExit
).
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Magnifier : MonoBehaviour
{
void OnTriggerEnter(Collider other)
{
other.transform.localScale *= 2;
}
void OnTriggerStay(Collider other)
{
}
void OnTriggerExit(Collider other)
{
other.transform.localScale /= 2;
}
}
A tím máme hotovo.
Výsledný inspektor našeho triggeru