Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

397
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda