Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

301
Views
¿Cómo puedo ejecutar código si algo es verdadero, continuar ejecutando el código indefinidamente, pero dejar de evaluar la instrucción if?

Recién estoy empezando por favor disculpe la gran ignorancia.

Estoy escribiendo ac# script en Unity como parte de la capacitación básica. Estoy haciendo el módulo de audio 3D y pensé en tratar de ser un poco más elegante que el alcance de esta lección en particular, que se supone que tiene un objeto que vuela a través de una ventana en una escena preconstruida y hace un 3D. sonido mientras se mueve.

Quería condicionar el movimiento del objeto a que un jugador se acercara a él en el espacio 3D. Descubrí cómo desencadenar el movimiento de un objeto en un script con una instrucción if que cambia los parámetros de transformación del objeto al que se adjunta el script cuando una variable 'distanceFromObject' es < 2. Funciona, sin embargo, el script se ejecuta en el sección de actualización del script que se ejecuta una vez cada cuadro. Esto significa que los parámetros de transformación del objeto se cambian en cada cuadro como se esperaba, pero, por supuesto, dejan de hacerlo cuando la distancia entre el objeto que se mueve y el jugador supera los 2.

Veo el error que cometí porque si el objeto se aleja cuando el jugador se acerca, inevitablemente eventualmente se alejará lo suficiente como para que la variable distanceFromObject crezca más de 2, luego se detiene y simplemente flota en su lugar. Aunque no sé cómo solucionarlo.

Necesito la secuencia de comandos para verificar la distancia entre el objeto y el jugador en cada cuadro para que active la instancia en que el jugador se acerca lo suficiente, y cuando se acercan lo suficiente, necesito que el objeto se aleje, sin embargo, una vez que se ha activado para moverme, necesito que el objeto continúe moviéndose, pero el script deja de verificar cuál es la distancia.

El guión se ve así

 using System.Collections; using System.Collections.Generic; using UnityEngine; public class FlyOff : MonoBehaviour { public Vector3 rotateChange; public Vector3 positionChange; public float distanceFromObject; public GameObject character; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { distanceFromObject = Vector3.Distance(character.transform.position, this.gameObject.transform.position); print (distanceFromObject); if (distanceFromObject < 2) { transform.Rotate (rotateChange); transform.position += positionChange; } } }
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Use banderas en lugar de escribir su lógica en la declaración if :

 public class FlyOff : MonoBehaviour { // fields removed for more readability // use a flag that's set to true/false private bool isCloseEnough = false; void Update() { distanceFromObject = Vector3.Distance(character.transform.position, this.gameObject.transform.position); print (distanceFromObject); // set the flag to true when player is close enough if (distanceFromObject < 2) { isCloseEnough = true; } // even if the player gets far, the flag will remain true if (isCloseEnough) { transform.Rotate (rotateChange); transform.position += positionChange; } } }

Incluso puede aplicar la lógica opuesta para evitar que el objeto se aleje cuando haya alcanzado una cierta distancia:

 if (distanceFromObject < 2) { isCloseEnough = true; } else if (distanceFromObject > SomeValue) { isCloseEnough = false; }
over 4 years ago · Santiago Trujillo Report

0

Si entiendo correctamente, podría simplemente agregar una bandera bool y configurarla una vez que esté lo suficientemente cerca. Luego, puede comenzar a moverse y omitir más controles de distancia, pero seguir moviéndose para siempre.

 private bool flyAway; void Update() { if(!flyAway) { distanceFromObject = Vector3.Distance(character.transform.position, transform.position); print (distanceFromObject); if (distanceFromObject < 2) { flyAway = true; } } else { transform.Rotate (rotateChange); transform.position += positionChange; } }

En general: ¡Evite usar print cada cuadro! ¡Incluso si su usuario no ve el registro en una aplicación creada, todavía está causando gastos generales!

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!