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: