Interacción del Jugador con los Objetos
Interfaces
Una interfaz es como un contrato que define un conjunto de métodos y propiedades que una clase debe implementar. Te permite especificar qué funcionalidad debe tener una clase sin proporcionar los detalles de implementación.
Ejemplo
Supongamos que estás creando un juego en Unity y quieres crear diferentes tipos de armas como espadas, pistolas y arcos. Podrías crear una interfaz llamada IWeapon
que describa las acciones básicas que cualquier arma debería poder realizar, como Attack()
y Reload()
.
Ahora, cualquier clase que quiera ser considerada un arma en tu juego debe implementar esta interfaz. Por ejemplo, podrías tener una clase Sword
o una clase Gun
.
Al usar interfaces, puedes asegurarte de que todas tus armas tengan la misma funcionalidad básica (Attack()
y Reload()
), pero cada una puede tener su propia implementación única. Esto hace que tu código sea más modular y más fácil de gestionar, especialmente a medida que tu juego crece en complejidad.
Esta es la interfaz que usamos en nuestro juego para marcar a los enemigos como objetos que podrían ser atacados.
public interface IGetAttacked{public void GetAttacked(int damage);}
TryGetComponent
if (rayCastHit.transform.TryGetComponent(out IGetAttacked getAttacked)){getAttacked.GetAttacked(damage);attackEffect.transform.position = rayCastHit.point;attackEffect.Play();isAttacking = false;}
Puntos Clave
raycastHit
: Esto se refiere al resultado de un impacto de raycast. Cuando lanzas un rayo en Unity, obtienes información sobre qué objeto;.TryGetComponent(out IGetAttacked getAttacked)
: Este método intenta recuperar un componente específico del transform delGameObject
. La palabra claveout
se utiliza para asignar el componente recuperado a la variablegetAttacked
, si tiene éxito. Si no, ignorará cualquier cosa bajo eseif
;IGetAttacked
: Este es el tipo de interfaz que el código está intentando recuperar delGameObject
. Especifica que elGameObject
debe tener un componente que implemente la interfazIGetAttacked
.
Si el GameObject
impactado por el raycast tiene un componente que implementa la interfaz IGetAttacked
, la variable getAttacked
contendrá una referencia a ese componente después de que esta línea se ejecute. De lo contrario, getAttacked
se asignará un valor de null.
¡Gracias por tus comentarios!