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

187
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 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