Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

217
Vistas
Búsqueda de rutas de enemigos a través de WayPoints con Unity

Así que quiero que mi Enemigo se mueva a un Punto de Ruta y luego aumente una Lista para que pueda moverse al siguiente Punto de Ruta, pero de alguna manera mi Enemigo se mueve al primer Punto de Ruta y luego se queda atascado en esta posición. ¡Un awnser sería un sueño! Aquí está mi código

 using System.Collections; using System.Collections.Generic; using UnityEngine; public class EnemyPathing : MonoBehaviour { [SerializeField] List<Transform> waypoints; [SerializeField] float moveSpeed = 2f; int waypointIndex = 0; // Start void Start() { transform.position = waypoints[waypointIndex].transform.position; } // Update void Update() { Move(); } private void Move() { if (waypointIndex <= waypoints.Count - 1) { var targetPosition = waypoints[waypointIndex].transform.position; var movementThisFrame = moveSpeed * Time.deltaTime; transform.position = Vector2.MoveTowards (transform.position, targetPosition, movementThisFrame); if (transform.position == targetPosition) { waypointIndex++; } } else { Destroy(gameObject); } }

}

Por cierto. en Console Unity dice: Assets\Scripts\EnemyPathing.cs(7,38):advertencia CS0649: El campo 'EnemyPathing.waypoints' nunca se asigna y siempre tendrá su valor predeterminado nulo

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Ahh, conversión automática de tipo, mi viejo némesis.

Aquí hay un código para pensar:

 var v2 = new Vector2(21, 22); var v3 = new Vector3(31, 32, 33); v3 = v2; print(v3.z);

El código anterior no imprime 33 como cabría esperar. Imprime 0 . La razón de esto es que la tercera línea son en realidad dos operaciones: una conversión de tipo implícita de Vector2 a Vector3 y luego una asignación. Cuando convierte de un vector más pequeño a uno más grande, los componentes adicionales obtienen valores predeterminados de 0 .

Así que cuando vas y haces esto:

 transform.position = Vector2.MoveTowards (transform.position, targetPosition, movementThisFrame);

.. en realidad estás configurando tranquilamente transform.position.z en 0 . Lo que generalmente estaría bien, excepto:

 if (transform.position == targetPosition)

.. si targetPosition.z no es 0 , esto nunca será cierto y nunca pasará del primer punto de referencia.

Aquí está la solución más simple que hace que su código haga lo que usted quiere:

 if ((Vector2)transform.position == (Vector2)targetPosition)

Eso asegurará que solo se comparen x e y .

Sin embargo, tenga en cuenta que su transform.position.z aún se está configurando en 0, por lo que es posible que desee hacer algo al respecto. Aquí hay una solución muy sucia:

 var temp = transform.position.z; transform.position = Vector2.MoveTowards (transform.position, targetPosition, movementThisFrame); transform.position.z = temp;
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda