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

197
Visualizações
¿Cómo puedo evitar que los colisionadores sin disparador se empujen entre sí en Unity?

Obtuve proyectiles prefabricados de la tienda de activos de Unity y no pude encontrar una manera de hacerlos funcionar de la manera prevista.

Los proyectiles tienen colisionadores ( no disparadores ), cuerpo rígido y un script que los mueve a velocidad. Detecta una colisión usando OnCollisionEnter , haciéndolos empujar objetos que tienen cuerpos rígidos (comportamiento no deseado).

De hecho, podría usar OnTriggerEnter , pero el proyectil genera partículas usando el ContactPoint del método OnCollisionEnter al que OnTriggerEnter no tiene acceso. Traté de simular este ContactPoint usando raycasts, pero no tuve suerte. Podría reescribir el código desde cero, pero solo si no hay otra forma...

Hay este video donde el tipo tiene la misma configuración que mi proyectil, cuerpo rígido y colisionador, pero el proyectil no empuja al otro objeto, pero no profundiza en su comportamiento.

¿Algunas ideas?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Deberá mantener la velocidad, la velocidad angular y la posición de cada cuadro, luego agregar un código a OnCollisionEnter en el que le dice a los dos colisionadores que se ignoren entre sí de ahora en adelante, y también restaurar la velocidad original del proyectil, la velocidad angular y la posición .

 private Collider col; private Rigidbody rigidBody; private Vector3 vel; private Vector3 angularVel; private Vector3 position; private void Start() { col = gameObject.GetComponent<Collider>(); rigidBody = gameObject.GetComponent<Rigidbody>(); } private void FixedUpdate() { vel = rigidBody.velocity; angularVel = rigidBody.angularVelocity; position = transform.position; } private void OnCollisionEnter(Collision collision) { Physics.IgnoreCollision(col, collision.collider); rigidBody.velocity = vel; rigidBody.angularVelocity = angularVel; transform.position = position; }
over 4 years ago · Santiago Trujillo Relatório

0

En Editar -> Configuración del proyecto -> Física, encontrará la Matriz de colisión de capas en la parte inferior. Aquí puede elegir qué capas chocan con qué capas. La capa predeterminada para gameobjects es "Predeterminada". Asigne una nueva capa a sus proyectiles y los objetos de juego con los que no desea colisiones. Luego puede desmarcar la casilla que representa estas dos capas en la Matriz de colisión de capas. Ahora estos objetos de juego no se afectarán entre sí cuando colisionen y no se llamará a métodos como OnCollisionEnter para ellos. Espero que esto responda completamente a su pregunta.

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