This shows you the differences between two versions of the page.
pjv:laboratoare:05 [2018/11/14 15:36] alexandru.gradinaru |
pjv:laboratoare:05 [2018/11/14 19:34] (current) alexandru.gradinaru |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Elemente de programare a jocurilor 3D ===== | + | ===== Introducere in 3D ===== |
==== Controlul caracterelor in 3D ==== | ==== Controlul caracterelor in 3D ==== | ||
Line 5: | Line 5: | ||
Pentru miscarea si controlul caracterelor in 3D sunt posibile mai multe abordari. | Pentru miscarea si controlul caracterelor in 3D sunt posibile mai multe abordari. | ||
- | === Character Controller === | + | === CharacterController === |
- | Character Controller este o componenenta ce poate fi adaugata pentru a putea controla caracaterul. Aceasta componenta nu foloseste elemente de fizica in nici nu fel, dar vine atasat cu un collider de baza ''Capsule Collider'' care nu permite intrarea in alte collidere. Acest lucru simplifica foarte mult scriptarea caracterului. | + | CharacterController este o componenenta ce poate fi adaugata pentru a putea controla caracaterul. Aceasta componenta nu foloseste elemente de fizica in nici nu fel, dar vine atasat cu un collider de baza ''Capsule Collider'' care nu permite intrarea in alte collidere. Acest lucru simplifica foarte mult scriptarea caracterului. |
Character Controller pune la dispozitie doua metode pentru miscarea caracterului: | Character Controller pune la dispozitie doua metode pentru miscarea caracterului: | ||
Line 36: | Line 36: | ||
</code> | </code> | ||
- | In cazul functiilor puse la dispozitie de Character Controller, miscarile sunt constranse de coliziuni in mod automat, si fiind destul de permisiva (spre exemplu va putea urca autmat rampe sau scari). | + | In cazul functiilor puse la dispozitie de Character Controller, miscarile sunt constranse de coliziuni in mod automat si este destul de permisiva (spre exemplu va putea urca autmat rampe sau scari). |
<html> | <html> | ||
Line 91: | Line 91: | ||
</code> | </code> | ||
Daca inputul nu este normalizat, caracterul se va misca cu o viteza mai mare atunci cand se misca in fi | Daca inputul nu este normalizat, caracterul se va misca cu o viteza mai mare atunci cand se misca in fi | ||
+ | |||
+ | |||
+ | === Rotatia camerei === | ||
+ | |||
+ | Pentru rotatia camerei exista mai multe variante, dar una dintre cele mai indiacate este sa retineti intotdeauna rotatia actuala a camerei, pentru a evita probleme legate de rotatii multiple compuse. | ||
+ | |||
+ | O varianta simpla: | ||
+ | <code> | ||
+ | private float yaw = 0.0f; | ||
+ | private float pitch = 0.0f; | ||
+ | |||
+ | void Update () { | ||
+ | yaw += speedH * Input.GetAxis("Mouse X"); | ||
+ | pitch -= speedV * Input.GetAxis("Mouse Y"); | ||
+ | |||
+ | transform.eulerAngles = new Vector3(pitch, yaw, 0.0f); | ||
+ | } | ||
+ | </code> | ||
==== Raycasting ==== | ==== Raycasting ==== | ||
Line 129: | Line 147: | ||
Similar cu spatiul 2D, se pot folosi atat obiecte plasate in scena, cat si partea de Canvas, in ceea ce priveste interfata grafica. | Similar cu spatiul 2D, se pot folosi atat obiecte plasate in scena, cat si partea de Canvas, in ceea ce priveste interfata grafica. | ||
+ | |||
+ | === FPS Gun === | ||
Astfel, spre exemplu pentru un FPS single player, in general nu avem nevoie de caracter, ci doar de maini, sau eventual doar o arma animata. | Astfel, spre exemplu pentru un FPS single player, in general nu avem nevoie de caracter, ci doar de maini, sau eventual doar o arma animata. | ||
Line 142: | Line 162: | ||
{{ :pjv:laboratoare:crosshair2.png?direct&750 |}} | {{ :pjv:laboratoare:crosshair2.png?direct&750 |}} | ||
+ | |||
+ | === Healthbar === | ||
Pentru reprezentarea healthbar-ului sau a altor elemente de tip bara, se poate folosi un element de UI (gameobject) de tip Slider, asa cum este reprezentat in imaginea de mai sus. | Pentru reprezentarea healthbar-ului sau a altor elemente de tip bara, se poate folosi un element de UI (gameobject) de tip Slider, asa cum este reprezentat in imaginea de mai sus. | ||
+ | |||
+ | <code> | ||
+ | GetComponent.<Slider>().value = myHealth; | ||
+ | </code> | ||
+ | |||
+ | === Minimap === | ||
+ | |||
+ | Pentru crearea unui minimap se foloseste de regula o camera suplimentara, plasata top-down deasupra scenei. | ||
+ | |||
+ | {{ :pjv:laboratoare:minimap1.png?direct&350 |}} | ||
+ | |||
+ | Camera special creata va trebui sa afiseze scena intr-o textura. Pentru acest lucru vom folosi un asset de tip ''Render texture'' (//Assets -> Create -> Render Texture//) pe care o vom atasa ca Target in camera nou creata. | ||
+ | |||
+ | {{ :pjv:laboratoare:minimap3.png?direct&350 |}} | ||
+ | |||
+ | Pasul urmator este sa afisam Minimap-ul. Pentru acest lucru, in canvas vom crea o imagine si vom lega textura in care salvam imaginile de la camera la aceasta. | ||
+ | |||
+ | {{ :pjv:laboratoare:minimap4.png?direct&350 |}} | ||
+ | |||
+ | Rezultatul poate fi ibunatatit prin plasarea acestuia intr-un loc potrivit adaugarea unei masti sau a unei borduri si asa mai departe. | ||
+ | |||
+ | {{ :pjv:laboratoare:minimap7.png?direct&750 |}} | ||
==== Crearea de animatii pentru obiecte 3D ==== | ==== Crearea de animatii pentru obiecte 3D ==== | ||
Line 181: | Line 225: | ||
</code> | </code> | ||
- | <hidden> | + | ==== Cerinte ==== |
- | (vezi demo UI de la 3dpub) | + | |
- | - coliziuni, proiectile | + | |
- | - interfata grafica pt un fps | + | |
- | - Managing weapons, Navmeshes, navmesh Agents, AI Auto-Attack | + | |
- | - animatie caractere atac, arma, coliziuni atac | + | |
- | </hidden> | + | |
- | <hidden> | + | Realizarea unui joc 3D fps |
- | ===== Elemente de programare a jocurilor 3D ===== | + | |
- | - animatii cu blend tree | + | |
+ | - Configurati scene pentru rulare 3D | ||
+ | - Adaugati in scena un caracter FPS: o arma, un crosshair si camera plasata pentru a da impresia unui caracter (puteti lua resurse din asset store sau alte locuri: [[pjv:resurse|]]) | ||
+ | - Caracterul se va putea controla de la tastatura si mouse. Folositi RigidBody sau CharacterController pentru control | ||
+ | - Caracterul va avea o bara de viata | ||
+ | - Arma | ||
+ | - va avea o mica animatie de miscare/rotatie la Fire | ||
+ | - va avea mai multe moduri de tragere, de ex: rifle (continuu) sau snipe (o data la apasarea de buton, cu damage mai mare) | ||
+ | - Adaugati unul sau mai multi inamici in scena scriptati astfel incat: | ||
+ | - sa aiba viata | ||
+ | - la plasarea tintei(crosshair) pe acesta sa apara un healthbar | ||
+ | - la actiunea de Fire a armei acesta va fi aruncat un pic inapoi si va pierde din viata | ||
+ | - Adaugati un minimap | ||
- | </hidden> |