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

image

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 Mesh Renderer komponentu, abychom měli náš trigger průhledný.

image

Cube už má defaultně svůj Box Collider, kdybychom měli nějaký custom objekt bez collideru, můžeme pomocí Add Component přidat nějaký z před-definovaných od Unity.

image

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.

image

Následně nadefinujeme 3 zmíněné metody popsané výše (pokud nějakou nepoužijete, nemusí ve skriptu být) 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.

image image

Výsledný inspektor našeho triggeru image