This is an old revision of the document!


Mecanici uzuale

Cerinte

TBU

Documentatie video

Inregistrare pe Teams

Documentatie extinsa text

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
public class PlayerManager : MonoBehaviour {
 
  public static PlayerManager instance;
  public GameObject player;
    
  void Awake()
  {
    instance = this;
  }

}

Folosind varianta simpla cu singleton, putem lua pozitia player-ului de interes:

target = PlayerManager.instance.player.transform;

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.

        //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);
	}

Inamici

Astfel, pentru inamici putem defini un controller cu un radius de actiune, si un gizmos pentru vizualizare usoara a acestuia in editor.

public class EnemyController : MonoBehaviour {

  public float radius = 2;
  
  void OnDrawGizmosSelected() {
    Gizmos.color = Color.red;
    Gizmos.DrawWireSphere(transform.position, radius);
  }


}

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/07.1700488290.txt.gz ยท Last modified: 2023/11/20 15:51 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