En este momento estás viendo ¿Cómo puedo evitar que los colisionadores que no se disparan se empujen entre sí en Unity?

 – Unity

¿Cómo puedo evitar que los colisionadores que no se disparan se empujen entre sí en Unity? – Unity

¿Cómo puedo evitar que los colisionadores que no se disparan se empujen entre sí en Unity?

– UnityAssets3Free

bienvenido , soy Juan y esta vez os traigo
nueva pregunta curiosa

Tengo los proyectiles prefabricados de Unity. asset tienda y no pude encontrar una manera de hacer que funcionen de la manera que pretendía.

Los proyectiles tienen colisionadores (no dispara), rigidbody y un script que los mueve a través de .velocity. Detecta una colisión usando OnCollisionEnterhaciéndolos empujar objetos que tienen cuerpos rígidos (comportamiento no deseado).

Realmente podría usar OnTriggerEnterpero el proyectil genera partículas usando el ContactPoint en OnCollisionEnter método que OnTriggerEnter no tiene acceso. Traté de simular esto ContactPoint usando raycasts pero sin suerte. Podría reescribir el código desde cero, pero solo si no hay otra forma…

tenerlo video donde el tipo tiene la misma configuración que mi proyectil, rigidbody y colisionador, aún así, el proyectil no empuja al otro objeto, pero no ahonda en su comportamiento.

¿Alguna idea?

2 respuestas 2

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í a partir de ahora y también restaurar la velocidad del proyectil, la velocidad angular y la posición originales.

    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;
    

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 los objetos del juego es «Predeterminada». Asigna una nueva capa a tus proyectiles y objetos de juego con los que no quieras chocar. 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 tu pregunta.

nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias

eso es todo,espero que te funcione

Deja una respuesta