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

396
Views
Objetos secundarios que no siguen al objeto principal en teletransportación frecuente

Pantalla de juego

Código de teletransportación

Objetos secundarios y su ubicación original

Soy nuevo en Unity, así que después de tomar solo algunos cursos en línea regulares para Unity2D, quería jugar agregando diferentes funciones, la primera de las cuales decidí hacer fue algo como en Portal, donde un proyectil genera dos portales conectados. puedes teletransportarte entre. Sin embargo, me he encontrado con un problema. Cuando estoy teletransportando a mi personaje, a veces, generalmente cuando me estoy teletransportando demasiado rápido pero puede suceder en cualquier momento, el niño se opone al objeto del juego Player tiende a cambiar, y no entiendo por qué. **Me gustaría:

  1. Sepa por qué el desplazamiento entre los objetos padre e hijo está cambiando a través de la teletransportación.
  2. Sepa cómo solucionar este problema, preferiblemente en un código que pueda entender fácilmente como principiante en Unity. También preferiblemente de una manera que no implique que agregue constantemente los objetos secundarios al objeto principal a través de la posición de transformación con el desplazamiento agregado, aunque si es la solución más simple, no estoy en contra de intentarlo. **

Algo que vale la pena señalar es que el cambio de compensación también es diferente, tengo un objeto secundario llamado Pies que detecta el suelo para saltar, que parece permanecer en la ubicación del portal anterior cuando se rompe por primera vez. Sin embargo, otro objeto secundario llamado Pistola, que es de donde se generan los proyectiles, parece que solo se mueve un poco hacia abajo, lo que significa que hay una inconsistencia en la forma en que se compensan cuando se rompen. Puede ser porque los Pies tienen un colisionador, pero no estoy seguro, no sé lo suficiente, y solo sentí que valía la pena mencionarlo.

 [SerializeField] GameObject otherPortal; Portal otherPortalComponent; BoxCollider2D boxCollider2D; bool firstEntered = true; // Start is called before the first frame update void Start() { boxCollider2D = GetComponent<BoxCollider2D>(); otherPortalComponent = otherPortal.GetComponent<Portal>(); } private void OnTriggerEnter2D(Collider2D collision) { if (boxCollider2D.IsTouchingLayers(LayerMask.GetMask("Player")) && firstEntered) { Teleport(collision.gameObject); otherPortalComponent.SetFirstEnteredFalse(); } } private void Teleport(GameObject obj) { obj.transform.position = otherPortal.transform.GetChild(0).transform.position; } public void SetFirstEnteredFalse() { this.firstEntered = false; } private void OnTriggerExit2D(Collider2D collision) { this.firstEntered = true; }

Para simplificar la pregunta, la posición de los objetos secundarios en relación con los padres cambia cuando cambio instantáneamente la posición de los padres a veces, ¿por qué sucede esto y cómo soluciono el problema sin simplemente usar transform.position en un método de actualización para agregar constantemente el niño a los padres, si es posible.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Vería la declaración if de su método OnTriggerEnter2D para encontrar una solución.

 private void OnTriggerEnter2D(Collider2D collision) { if (boxCollider2D.IsTouchingLayers(LayerMask.GetMask("Player")) && firstEntered) { Teleport(collision.gameObject); otherPortalComponent.SetFirstEnteredFalse(); } }

Debido a que está utilizando On Trigger Enter, este método solo se llamará con los pies, ya que el colisionador principal de su jugador no es un Trigger. Esto significa que su variable de collision a la que llama su método Teleport es en realidad el objeto de sus pies, no el objeto del cuerpo de su jugador. Por lo tanto, está cambiando la compensación de sus pies con respecto a su jugador en su método de Teletransporte.

Intentaría cambiar su método de colisión a OnCollisionEnter2D (Collision2D) que recogería el colisionador base de su jugador cuando ingresa y no el colisionador de pies.

 void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject.GetComponent<Player>() && firstEntered) { Teleport(collision.gameObject); otherPortalComponent.SetFirstEnteredFalse(); } }

Dado que la secuencia de comandos del reproductor se encuentra en el mismo objeto que el colisionador del reproductor base, puede realizar una simple llamada a GetComponent<Player>() para comprobar si es el objeto del reproductor. Aunque aún podría usar la Capa para verificar si lo desea.

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!