BI-PGA Programování grafických aplikací
Jdi na navigaci předmětu

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.

isTrigger

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ý.

newCube
colliders

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.

createScript

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.

result1
result2

Výsledný inspektor našeho triggeru

resultInspektor