Preskoči na sadržaj
FORTRONIQ
IzbornikDigitalni sadržajiVirtualna stvarnostVježbeV8 Prva programska logika: događaji, varijable, ispis

VJEŽBA V8 · MODUL 3 · RAZVOJ OKRUŽENJA VIRTUALNE STVARNOSTI

Vježba V8 · 2 sata

Prva programska logika: događaji, varijable, ispis

Prva programska logika laboratorija VR-1 u nacrtu: događaj pri pokretanju, varijable, ispis na zaslon i grananje koje prati koliko je dijelova robota skupljeno. Isti tok izveden je i kao kratki primjer u okruženju s C# skriptama.

Moći ću:
  • izraditi nacrt s događajem pri pokretanju i događajem ulazne akcije
  • definirati varijable odgovarajućih tipova i mijenjati im vrijednost
  • ispisati poruku na zaslon i u zapisnik te razlikovati razvojni ispis od sučelja
  • upotrijebiti grananje za odluku o stanju sklopa
  • izračunati napredak u postocima i izbjeći pogrešku cjelobrojnog dijeljenja

O vježbi

Vježba V8Trajanje: 2 sataModul 3

Prije vježbe proći gradivo: 3.2 Programska logika: nacrti, događaji i varijable.

Pitanja i zadaci na ovoj stranici su bez odgovora. Rješenje s postupkom otvara se gumbom Prikaži rješenje ispod svakog pitanja, a upute za nastavnika nalaze se na dnu stranice.

Zadatak

U projektu VR1_Laboratorij izradite nacrt BP_Brojac i postavite ga u scenu. Pri pokretanju ispisuje „Laboratorij VR-1 spreman", postavlja BrojDijelova = 12 (cijeli broj), Skupljeno = 0 i RobotSklopljen = laž (logička vrijednost). Svaki put kad se aktivira ulazna akcija DioSkupljen (za ispitivanje tipka na tipkovnici, zatim tipka kontrolera), brojač se povećava za 1 i ispisuje napredak u postocima.

Grananje odlučuje: kad je skupljeno 12 dijelova, ispisuje se „Robot sklopljen" i postavlja RobotSklopljen = istina; inače se ispisuje koliko je dijelova preostalo. Predaje se snimka nacrta i snimka ispisa za 7 i za 12 dijelova.

Oprema i pribor

  • projekt VR1_Laboratorij iz vježbe V07
  • računalo s razvojnim okruženjem s nacrtima (npr. Unreal Engine); naočale samo za završnu provjeru
  • po želji okruženje s C# skriptama (npr. Unity) za usporedbu

Pravila koja se primjenjuju

Logika VR aplikacije pokreće se događajima: pokretanjem, ulaznom akcijom, sudarom, istekom mjerača vremena. Događaj koji se izvodi u svakom okviru troši dio budžeta od 11,1 ms, pa se u njega stavlja samo ono što se zaista mijenja svaki okvir. Varijabla ima tip (cijeli broj, realni broj, logička vrijednost, tekst) i pripada objektu; dvije kopije istog nacrta imaju svaka svoje vrijednosti.

Ispis na zaslon je razvojni alat: u mnogim okruženjima ne prikazuje se u završnoj izgradnji, a u naočalama je često izvan vidnog polja. Korisniku se poruke prikazuju prostornim sučeljem, npr. pločom uz stol.

Pažnja

Dijeljenje dvaju cijelih brojeva u mnogim jezicima daje cijeli broj: 7 / 12 = 0. Prije dijeljenja pretvorite brojnik u realni broj.

Crtež

Pri pokretanju događaj Postavi Skupljeno = 0 Ispis VR-1 spreman Ulazna akcija DioSkupljen Postavi Skupljeno + 1 Grananje Skupljeno ≥ 12 ? Varijabla BrojDijelova = 12 Ispis Preostalo: N Ispis Robot sklopljen istina laž izvršni tok podatak (vrijednost varijable)
Slika V8.1 — Nacrt BP_Brojac: dva događaja pokreću izvršni tok (puna crta), a varijabla BrojDijelova ulazi u uvjet grananja kao podatak (iscrtkano).

Postupak

  1. Nacrt. U mapi Nacrti izradite novi nacrt vrste objekta u sceni (engl. actor) i nazovite ga BP_Brojac. Postavite ga u scenu L_Laboratorij.
  2. Varijable. Dodajte BrojDijelova (cijeli broj, 12), Skupljeno (cijeli broj, 0) i RobotSklopljen (logička, laž).
  3. Pokretanje. Na događaj pri pokretanju spojite postavljanje Skupljeno = 0 i ispis „Laboratorij VR-1 spreman". Uključite ispis i na zaslon i u zapisnik.
  4. Ulazna akcija. Definirajte akciju DioSkupljen i vežite je na tipku tipkovnice i tipku kontrolera. Objektu dopustite primanje ulaza (naziv postavke ovisi o inačici). Koristite događaj pritiska, ne držanja.
  5. Brojanje i napredak. Na akciju povećajte Skupljeno za 1, pretvorite ga u realni broj, podijelite s BrojDijelova, pomnožite sa 100 i ispišite s jednom decimalom.
  6. Grananje. Uvjet Skupljeno ≥ BrojDijelova. Istina: RobotSklopljen = istina i ispis „Robot sklopljen". Laž: ispis „Preostalo:" s razlikom BrojDijelova − Skupljeno.
  7. Provjera. Pokrenite scenu, pritisnite tipku 7 pa 12 puta i snimite ispis. Na kraju provjerite ispis u naočalama i u zapisniku.

Isti tok u okruženju s C# skriptama (primjer za razumijevanje; provjerite ga u svojoj inačici, a metodu DioSkupljen pozovite iz ulazne akcije):

using UnityEngine;

public class Brojac : MonoBehaviour
{
  public int brojDijelova = 12;
  int skupljeno = 0;
  bool robotSklopljen = false;

  void Start() { skupljeno = 0; Debug.Log("Laboratorij VR-1 spreman"); }

  public void DioSkupljen() {
    if (robotSklopljen) return;                          // nakon sklapanja se više ne broji
    skupljeno++;
    float napredak = 100f * skupljeno / brojDijelova;    // 100f: dijeljenje u realnim brojevima
    Debug.Log("Napredak: " + napredak.ToString("F1") + " %");
    if (skupljeno >= brojDijelova) { robotSklopljen = true; Debug.Log("Robot sklopljen"); }
    else Debug.Log("Preostalo: " + (brojDijelova - skupljeno));
  }
}

Inačica bez naočala. Cijela vježba izvodi se u prozoru okruženja s tipkovnicom; naočale trebaju samo za korak 7.

Pitanja i zadaci

1. Objasnite razliku između događaja, funkcije i varijable na primjeru BP_Brojac. Što na slici V8.1 prikazuje puna, a što iscrtkana crta?

Prikaži rješenje

Događaj je početak toka koji pokreće okruženje (pokretanje) ili korisnik (DioSkupljen). Funkcija je imenovani slijed koraka koji se poziva s više mjesta, npr. „IzracunajNapredak". Varijabla čuva stanje objekta, npr. Skupljeno. Puna crta je izvršni tok, redoslijed koraka; iscrtkana je tok podataka, vrijednost koja ulazi u uvjet.

2. Računski. Ispis „Laboratorij VR-1 spreman" greškom je spojen na događaj koji se izvodi svaki okvir, pri 90 sl/s, a poruka ostaje na zaslonu 2 s. Koliko je poruka istodobno na zaslonu i koliko se ispisa izvede u 5 minuta?

Prikaži rješenje

Istodobno: 90 · 2 = 180 poruka. U 5 minuta: 90 · 60 · 5 = 27 000 ispisa. Zaslon je nečitljiv, a zapisnik raste i troši vrijeme okvira. Inicijalizacija ide na događaj pri pokretanju, koji se izvodi jednom.

3. Računski. Nakon 7 skupljenih dijelova ispisuje se napredak 0 %. Objasnite zašto i izračunajte ispravnu vrijednost.

Prikaži rješenje

Dijeljeni su cijeli brojevi: 7 / 12 = 0 (ostatak se odbacuje), pa je 0 · 100 = 0. Ispravno: 7,0 / 12 · 100 = 58,3 %. Alternativa je najprije množenje 7 · 100 = 700 pa 700 / 12 = 58 (cjelobrojno, bez decimale).

4. Računski. Vrijeme od pokretanja mjeri se brojenjem okvira uz pretpostavku 90 sl/s. Nakon 450 okvira ispisuje se „5 s". Koliko je stvarno prošlo na uređaju B prije optimizacije, pri 72 sl/s? Kako mjeriti ispravno?

Prikaži rješenje

Stvarno 450 / 72 = 6,25 s, a ispis kaže 5 s: ispis zaostaje 1,25 s, odnosno pokazuje 20 % manje od stvarnog vremena. Ispravno je zbrajati trajanje svakog okvira (engl. delta time) ili koristiti mjerač vremena okruženja, koji ne ovise o broju sličica.

5. Pronađi pogrešku. Uvjet grananja je Skupljeno = 12, a akcija je vezana na događaj držanja tipke. Što se događa i kako ispraviti?

Prikaži rješenje

Dok se tipka drži, akcija se izvodi svaki okvir: već pola sekunde držanja pri 90 sl/s doda oko 45 „dijelova". Uvjet Skupljeno = 12 ispunjen je samo u jednom okviru, pa se „Robot sklopljen" ispiše jednom usred niza poruka, a brojač raste dalje i „Preostalo" postaje negativno. Jedno držanje tipke tako „sklopi" robot, a to nije ono što se broji. Ispravak: događaj pritiska (jednom po pritisku) i uvjet Skupljeno ≥ 12, uz zaštitu da se nakon sklapanja više ne broji.

6. U sceni su greškom dvije kopije BP_Brojac. Što će pokazivati ispis nakon 12 pritisaka?

Prikaži rješenje

Svaka kopija ima svoje varijable i obje primaju ulaz, pa se svaka poruka pojavljuje dvaput i obje prijavljuju „Robot sklopljen". Stanje sklopa mora postojati na jednom mjestu, npr. u jednom upravitelju scene.

7. U prozoru okruženja ispis se vidi, a u naočalama ne. Zašto i kako poruku prikazati korisniku VR-1?

Prikaži rješenje

Razvojni ispis crta se u kutu slike ili samo na zrcalnom prozoru, a u naočalama je izvan vidnog polja ili se ne prikazuje. Korisniku se poruka prikazuje prostornim sučeljem: pločom s tekstom 1–2 m ispred korisnika ili uz radni stol.

Za nastavnika

Otvori upute za nastavnika

Priprema

Provjerite da se projekt iz V07 otvara na svim računalima. Pripremite gotov BP_Brojac za skupine koje zaostanu.

Tijek sata

  1. 10 min: događaji, varijable, izvršni tok i tok podataka (slika V8.1).
  2. 35 min: koraci 1–5.
  3. 20 min: grananje i provjera u prozoru.
  4. 15 min: provjera u naočalama, usporedba s primjerom u C#.
  5. 10 min: pitanja 2–5.

Očekivani rezultati

Nakon 7 pritisaka ispis 58,3 % i „Preostalo: 5", nakon 12 „Robot sklopljen"; ispis pri pokretanju samo jednom.

Česte pogreške

  • cjelobrojno dijeljenje i napredak 0 %
  • događaj držanja umjesto pritiska
  • objekt ne prima ulaz jer ulaz nije omogućen

Vrednovanje

KriterijBodovi
Varijable ispravnih tipova i početnih vrijednosti4
Događaj pri pokretanju i ulazna akcija4
Napredak u postocima bez cjelobrojne pogreške4
Grananje i oba ishoda4
Snimke i odgovori na pitanja4
Ukupno20