Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pjv:laboratoare:2023:06 [2023/11/13 16:10]
alexandru.gradinaru
pjv:laboratoare:2023:06 [2024/10/07 10:49] (current)
alexandru.gradinaru
Line 1: Line 1:
-===== Interactiuni cu obiecte =====+===== 6. Interactiuni cu obiecte =====
  
 ==== Cerinte ===== ==== Cerinte =====
Line 130: Line 130:
 {{ :​pjv:​laboratoare:​gizmosselected.png?​direct&​750 |}} {{ :​pjv:​laboratoare:​gizmosselected.png?​direct&​750 |}}
  
-=== Referinta globala la player === 
  
-O problema in programarea interactiunilor este detectarea player-ului,​ in sensul de referinta. Astfel, avem mai multe variante: 
-  * putem cauta un obiect dupa tag/nume etc. 
-  * intr-o variabila target putem referentia direct player-ul (dar asta inseamna ca la fiecare agent trebuie mapat) 
-  * putem folosi un singleton in care se tine referentiaza playerul si poate fi accesat de oriunde 
- 
-<​code>​ 
-public class PlayerManager : MonoBehaviour { 
-  
-  public static PlayerManager instance; 
-  public GameObject player; 
-    ​ 
-  void Awake() 
-  { 
-    instance = this; 
-  } 
- 
-} 
-</​code>​ 
- 
-Folosind varianta simpla cu singleton, putem lua pozitia player-ului de interes: 
- 
-<​code>​ 
-target = PlayerManager.instance.player.transform;​ 
-</​code>​ 
- 
-Astfel, putem efectua usor operatii care tin de player - de exemplu putem orienta inamicii sau un npc cu fata catre player, in momentul unei interactiuni. 
- 
-<​code>​ 
- 
-        //Roteste cu 90 grade 
-        void RotateN() { 
-         ​Vector3 currentRotation = transform.rotation;​ 
-         ​Vector3 wantedRotation = currentRotation * Quaternion.AngleAxis(-90,​ Vector3.up);​ 
-         ​transform.rotation = Quaternion.Slerp(currentRotation,​ wantedRotation,​ Time.deltaTime * rotationSpeed);​ 
-        } 
-        //Roteste inamicul cu fata catre player ​ 
- void FaceTarget () 
- { 
- Vector3 direction = (target.position - transform.position).normalized;​ 
- Quaternion lookRotation = Quaternion.LookRotation(new Vector3(direction.x,​ 0, direction.z));​ 
- transform.rotation = Quaternion.Slerp(transform.rotation,​ lookRotation,​ Time.deltaTime * 5f); 
- } 
-</​code>​ 
- 
- 
- 
-=== Inamici === 
- 
-Astfel, pentru inamici putem defini un controller cu un radius de actiune, si un gizmos pentru vizualizare usoara a acestuia in editor. 
- 
-<​code>​ 
-public class EnemyController : MonoBehaviour { 
- 
-  public float radius = 2; 
-  ​ 
-  void OnDrawGizmosSelected() { 
-    Gizmos.color = Color.red; 
-    Gizmos.DrawWireSphere(transform.position,​ radius); 
-  } 
- 
- 
-} 
-</​code>​ 
- 
-{{ :​pjv:​laboratoare:​enemy-radius.png?​500 |}} 
-Diferenta este ca acesti agenti vor raspunde automat la anumite evenimente: 
-  * inamicii de obicei incep sa interactioneze atunci cand player-ul intra intr-o anumita raza de actiune 
-  * NPC-urile interactoneaza la fel, bazate pe o raza de actiune sau efectiv interactiune directa (click) 
  
pjv/laboratoare/2023/06.1699884621.txt.gz ยท Last modified: 2023/11/13 16:10 by alexandru.gradinaru
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0