This is an old revision of the document!
TBU
Inregistrare pe Teams
O problema in programarea interactiunilor este detectarea player-ului, in sensul de referinta. Astfel, avem mai multe variante:
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); }
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: