Marvin Rafael Ancheta Cuéllar
Daniel Alejandro Romero Chavez
Ricardo Rito Anguiano
La experiencia mejora cuando los enemigos dejan de moverse al unísono. Con unos ajustes simples en Random.Range, en Start y con una buena organización de prefabs y sorting layers, puedes pasar de patrones previsibles a un comportamiento variado y creíble, sin complejidad extra.
¿Cómo corregir el movimiento y evitar enemigos sincronizados en Unity?
Corregir dos problemas comunes es clave: que los enemigos no se muevan hacia arriba/derecha y que todos se muevan a la vez. El primer bug ocurre porque Random.Range no incluye el límite superior, así que si quieres alcanzar -1, 0 y 1, el máximo debe ser 2. Esto habilita todas las direcciones y rompe la sensación de atasco en un eje.
¿Qué hace Random.Range con sus límites?
Cuando generas -1, 0 o 1, el valor superior debe ser exclusivo. Ajusta así:
int dx = Random.Range(-1, 2); int dy = Random.Range(-1, 2);
Con esto, el enemigo ya puede moverse izquierda/derecha y abajo/arriba como corresponde.
¿Cómo aplicar aleatoriedad por enemigo con Random.Range?
Para que cada enemigo tenga su propio ritmo, multiplica sus tiempos por un factor aleatorio al inicializar en Start. Así, unos tardarán más en dar el paso y otros menos, evitando sincronías poco naturales. Es un truco simple de game design que aporta variedad sin cambiar tu lógica principal.
// En Start timeBetweenSteps *= Random.Range(0.5f, 1.5f); timeToMakeStep *= Random.Range(0.5f, 1.5f);
Estos multiplicadores pueden estar “hardcodeados”, pero si lo prefieres, expón variables públicas para configurarlos desde el editor. Dado que ya tienes públicos timeBetweenSteps y timeToMakeStep, basta con editarlos y dejar que Random.Range module cada instancia.
¿Cómo organizar prefabs, tags y sorting layers para un flujo limpio?
Antes de clonar, crea un prefab del enemigo y arrástralo a la carpeta de prefabs. Luego, puebla el escenario arrastrando varias instancias y asegúrate de que todas tengan la tag de enemigo. Si planeas misiones de “eliminar X enemigos”, coloca suficientes en la escena.
Este conjunto de ajustes corrige bugs, introduce aleatoriedad significativa y aplica principios de game design para que cada enemigo se sienta distinto y menos predecible, tal como se espera en juegos de rol que premian la adaptación del jugador.
¿Quieres que revisemos tu implementación o ajustes de tiempos? Cuéntame en comentarios qué variaciones te dieron mejores resultados.
Marvin Rafael Ancheta Cuéllar
Daniel Alejandro Romero Chavez
Ricardo Rito Anguiano
Renzo Bendezu Pautrat
Harold Jara
Leonardo Gutierrez
Sería interesante programar que si el enemigo detecte al usuario lo persiga. Creo que todo esto es lo más básico de inteligencia artificial.
Creo que podría hacerse con un Collider del enemigo en Trigger, uno mas grande que el que ya tiene , así si el Conejo entra en el "rango" el enemigo cambia su dirección a la del Conejo.
Como te comenta Daniel, unicamente le agregas un collider con un trigger, en el script detectas el trigger con el player y lo programas para que se acerque al player mientras se mantenga en dicho rango
Excelente !
yo he programado en Unreal, como tiene blueprints se me hace más facil de hacer la inteligencia artificial y ps uno de las formas más faciles de detección es un trigger, pero ellos tienen componente de vista y de captura de sonido, pero se me hace facil tambien aca en Unity
Genial