Página 1 de 2 12 ÚltimoÚltimo
Resultados 1 al 15 de 18

Tema: Character controller en modelo importado a Unity desde Maya

  1. #1
    Fecha de ingreso
    Apr 2022
    Mensajes
    17

    Question Character controller en modelo importado a Unity desde Maya

    Buenas. Tengo un personaje creado en Autodesk Maya y lo he importado a Unity con todas sus animaciones, modelo y texturas. Sin embargo, al asignarle el character controller, el personaje anda, corre y golpea bien, pero en el salto, la cápsula del character controller no sigue al personaje y se queda pegada al suelo, a pesar de que la animación se ve bien.

    He intentado centrar la cápsula desde código, pero no funciona ya que la malla del personaje está por encima. He considerado aumentar temporalmente la altura de la cápsula, pero esto no es una solución definitiva.

    El objeto playera contiene dos objetos, uno de los controladores declarado en Maya y otro con el hips y la estructura de los huesos. Si coloco el character controller en el objeto player, ocurre el problema mencionado anteriormente, pero si lo coloco en hips, la cápsula sigue al personaje en todos los movimientos, pero las animaciones no funcionan correctamente.

    He intentado crear el avatar del personaje en Unity directamente, y aunque reconoce todos los huesos, ocurre el mismo problema que con el avatar genérico.

    He revisado el animation root para ver si estaba marcado, pero no encontré ninguna solución.

    ¿Alguien tiene alguna idea de lo que podría estar pasando para que la cápsula no siga al personaje cuando coloco el character controller en el objeto player?

    Agradecería cualquier consejo o ayuda para solucionar este problema.

    Muchas gracias y un saludo.

  2. #2
    Fecha de ingreso
    Apr 2002
    Mensajes
    25,945
    Existen varias soluciones posibles para el problema que estás experimentando al utilizar un character controller en tu personaje en Unity. Te propongo algunas opciones que podrían funcionar:

    Utiliza el componente "Rigidbody" en lugar del character controller: Este componente de Unity permite que los objetos físicos en el juego se muevan de manera realista con la simulación de la física. Al agregar un Rigidbody a tu personaje, podrás controlar su movimiento de una manera más natural. Además, puedes ajustar la forma del colisionador para que se ajuste mejor a la forma de tu personaje.

    Usa la opción "Automatic" en el ajuste del centro de la cápsula: Si tienes la cápsula del character controller ajustada a "Manual", es posible que la cápsula no se esté moviendo con el personaje. Intenta cambiar a la opción "Automatic" para que la cápsula se ajuste automáticamente a la posición del personaje.

    Modifica las animaciones para que coincidan con el movimiento de la cápsula: Puedes ajustar las animaciones de tu personaje para que se sincronicen con el movimiento de la cápsula del character controller. Esto puede requerir ajustar la posición y rotación de los huesos de tu personaje en la animación.

    Ajusta la posición de los huesos en Maya: Puedes ajustar la posición de los huesos de tu personaje en Autodesk Maya para que coincidan con la cápsula del character controller en Unity. Asegúrate de que la posición de la cápsula en Unity coincida con la posición de la cápsula en Maya.

    Usa un script de movimiento personalizado: En lugar de utilizar el character controller, puedes crear un script personalizado para controlar el movimiento de tu personaje. Esto te permitirá tener un control más preciso sobre el movimiento del personaje y su colisionador.

    Espero que alguna de estas soluciones te ayude a resolver tu problema. Recuerda que en algunos casos, puede ser necesario combinar varias soluciones para lograr el resultado deseado. ¡Buena suerte!
    |Agradecer cuando alguien te ayuda es de ser agradecido|

  3. #3
    Fecha de ingreso
    Apr 2002
    Mensajes
    25,945

    Rigidbody como alternativa a character controller

    El componente "Rigidbody" es una alternativa al character controller que ofrece algunas ventajas e inconvenientes.

    Ventajas:

    Realismo físico: El "Rigidbody" utiliza la física realista para simular los movimientos del personaje, lo que puede hacer que los movimientos sean más naturales y creíbles.

    Interacción con el entorno: El "Rigidbody" permite que el personaje interactúe con el entorno de una manera más realista. Por ejemplo, el personaje puede empujar objetos, saltar más alto en una plataforma elevada, o caer al suelo de manera realista.

    Colisiones: El "Rigidbody" gestiona automáticamente las colisiones con otros objetos, lo que puede simplificar el proceso de programación.

    Inconvenientes:

    Más complejidad: El "Rigidbody" puede ser más complejo de programar y configurar que el character controller, especialmente si se desea un comportamiento preciso.

    Menor control sobre el movimiento: El "Rigidbody" utiliza la física realista para simular los movimientos, lo que significa que el programador tiene menos control sobre la velocidad y la dirección del movimiento del personaje.

    Más uso de recursos: El "Rigidbody" puede ser más intensivo en recursos que el character controller, lo que puede afectar el rendimiento del juego en computadoras más antiguas o con recursos limitados.

    En resumen, el uso del "Rigidbody" puede ofrecer ventajas en términos de realismo físico e interacción con el entorno, pero puede ser más complejo de programar y consumir más recursos del sistema que el character controller. La elección entre los dos dependerá de las necesidades específicas del juego y las habilidades del programador.
    |Agradecer cuando alguien te ayuda es de ser agradecido|

  4. #4
    Fecha de ingreso
    Apr 2002
    Mensajes
    25,945

    Código base para los movimientos del personaje

    Este script tiene una variable de velocidad para controlar el movimiento del personaje, una variable de fuerza de salto para el salto y una variable de fuerza de voltereta para controlar la voltereta del personaje. También hay una variable de duración de voltereta para controlar cuánto tiempo debe durar la voltereta.

    El script utiliza la función Translate para mover el personaje horizontalmente y la función AddForce para hacer que el personaje salte. También utiliza una corutina para controlar la voltereta del personaje y desactiva la gravedad y el movimiento horizontal mientras se realiza la voltereta.

    El script también tiene una función OnCollisionEnter que comprueba si el personaje está en el suelo o no. Si el personaje está en el suelo, se establece la variable isGrounded en true para permitir que el personaje salte de nuevo.

    Código:
    using UnityEngine;
    
    public class CustomController : MonoBehaviour
    {
        public float speed = 5f;               // Velocidad de movimiento del personaje
        public float jumpForce = 7f;           // Fuerza de salto del personaje
        public float rollForce = 10f;          // Fuerza de voltereta del personaje
        public float rollDuration = 0.5f;      // Duración de la voltereta del personaje
    
        private bool isGrounded;               // Variable para comprobar si el personaje está en el suelo
        private Rigidbody rb;                  // Componente RigidBody del personaje
    
        private void Start()
        {
            rb = GetComponent<Rigidbody>();   // Obtenemos el componente RigidBody del personaje
        }
    
        private void Update()
        {
            // Movimiento horizontal del personaje
            float horizontal = Input.GetAxis("Horizontal");
            transform.Translate(Vector3.right * horizontal * speed * Time.deltaTime);
    
            // Salto del personaje
            if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
            {
                rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
                isGrounded = false;
            }
    
            // Voltereta del personaje
            if (Input.GetKeyDown(KeyCode.LeftShift))
            {
                StartCoroutine(Roll());
            }
        }
    
        private void OnCollisionEnter(Collision collision)
        {
            // Comprobar si el personaje está en el suelo
            if (collision.gameObject.CompareTag("Ground"))
            {
                isGrounded = true;
            }
        }
    
        private IEnumerator Roll()
        {
            // Desactivar la gravedad y el movimiento horizontal
            rb.useGravity = false;
            float horizontal = Input.GetAxis("Horizontal");
            transform.Translate(Vector3.right * -horizontal * rollForce * Time.deltaTime);
    
            // Realizar la voltereta
            yield return new WaitForSeconds(rollDuration);
    
            // Reactivar la gravedad y el movimiento horizontal
            rb.useGravity = true;
            transform.Translate(Vector3.right * horizontal * rollForce * Time.deltaTime);
        }
    }
    |Agradecer cuando alguien te ayuda es de ser agradecido|

  5. #5
    Fecha de ingreso
    Apr 2002
    Mensajes
    25,945

    Ejemplo de un script que permite que el personaje interactúe con objetos

    Te dejo un ejemplo de script que permite que el personaje interactúe con objetos en el mundo que le rodea y reconozca los mismos, es un código base, a partir de ahí puedes ampliarlo tanto como quieras.

    En este ejemplo, el script utiliza un Raycast para detectar si hay un objeto interactuable dentro de una distancia específica y en una capa determinada. Si se detecta un objeto interactuable, se llama al método Interact() del componente Interactable asociado con el objeto. Puedes personalizar la distancia y la capa de detección para adaptarse a tus necesidades.

    Para utilizar este script, deberás crear un nuevo script llamado Interact y adjuntarlo a tu personaje en el editor de Unity. Asegúrate de agregar también un componente de cámara a tu personaje si no lo has hecho ya, para poder usarla en el Raycast.

    Luego, en cada objeto del mundo del juego que desees que sea interactuable, deberás crear un componente de tipo Interactable y personalizarlo para que haga lo que quieras que haga cuando se interactúa con él.

    Espero que esto te sea útil.

    Código:
    using UnityEngine;
    
    public class Interact : MonoBehaviour
    {
        public float interactDistance = 2f;
        public LayerMask interactLayer;
    
        private Camera playerCam;
    
        private void Start()
        {
            playerCam = Camera.main;
        }
    
        private void Update()
        {
            if (Input.GetKeyDown(KeyCode.E))
            {
                RaycastHit hit;
                if (Physics.Raycast(playerCam.transform.position, playerCam.transform.forward, out hit, interactDistance, interactLayer))
                {
                    Interactable interactable = hit.collider.GetComponent<Interactable>();
                    if (interactable != null)
                    {
                        interactable.Interact();
                    }
                }
            }
        }
    }
    |Agradecer cuando alguien te ayuda es de ser agradecido|

  6. #6
    Fecha de ingreso
    Apr 2022
    Mensajes
    17
    Buenas,

    lo primero, muchas gracias por la ayuda!!!

    Intento responder sobre tu post.

    Cita Iniciado por 3dpoder Ver mensaje
    Existen varias soluciones posibles para el problema que estás experimentando al utilizar un character controller en tu personaje en Unity. Te propongo algunas opciones que podrían funcionar:

    Utiliza el componente "Rigidbody" en lugar del character controller: Este componente de Unity permite que los objetos físicos en el juego se muevan de manera realista con la simulación de la física. Al agregar un Rigidbody a tu personaje, podrás controlar su movimiento de una manera más natural. Además, puedes ajustar la forma del colisionador para que se ajuste mejor a la forma de tu personaje.

    --- Pues sobre este punto, te explico, al principio tenía un RigidBody, pero me hacía efectos un poco raros. Me voy a explicar, cuando llegaba a una pared colisionaba, pero si mantenía pulsado el botón para hacer la acción de correr y aunque intentase ajustar la velocidad al final el personaje (después de un rato) acaba consiguiendo pasar la pared, aunque hice varios controles por código, como la pared es fina la animación acaba haciendo que poco a poco se atraviese. Además si dejaba al personaje parado cerca de una pared al hacer la animación del idle, en la cual mueve un brazo en lateral a modo de saludo, la mano acababa entrando en la pared y se veía un cacho de brazo por el otro lado. Le coloqué un par do coliders en las manos y otro un poco separado de la pared, pero aunque los detectaba y por código paraba la animación igualmente parte seguía pasando.

    Al final me decanté por el Character controller, el cual me resolvía esos problemas, sé que no tiene la misa física, pero la física se la he aplicado por código, además utilizo el método SimpleMove, que como sabes aplica automáticamente gravedadd en el eje Y y también permite utilizar velocidad para el X y Z.



    Usa la opción "Automatic" en el ajuste del centro de la cápsula: Si tienes la cápsula del character controller ajustada a "Manual", es posible que la cápsula no se esté moviendo con el personaje. Intenta cambiar a la opción "Automatic" para que la cápsula se ajuste automáticamente a la posición del personaje.

    -- Pues aquí me has pillado, no veo esa opción en la capsula que crea el CharacterController, ¿me podrías orientar, por favor?

    Modifica las animaciones para que coincidan con el movimiento de la cápsula: Puedes ajustar las animaciones de tu personaje para que se sincronicen con el movimiento de la cápsula del character controller. Esto puede requerir ajustar la posición y rotación de los huesos de tu personaje en la animación.

    -- En este caso te comento que no es el problema, me explico, todas las animaciones se mueven con la capsula bien, pero en el salto la capsula no quiere hacer caso al eje Y, salvo que la ponga en el hips, pero claro, en el hips no actuan las animaciones.

    Ajusta la posición de los huesos en Maya: Puedes ajustar la posición de los huesos de tu personaje en Autodesk Maya para que coincidan con la cápsula del character controller en Unity. Asegúrate de que la posición de la cápsula en Unity coincida con la posición de la cápsula en Maya.

    -- Pues curiosamente los huesos están bien orientados, porque el avatar los coge perfectamente y además como te comento se reproducen bien con la capsula.

    Usa un script de movimiento personalizado: En lugar de utilizar el character controller, puedes crear un script personalizado para controlar el movimiento de tu personaje. Esto te permitirá tener un control más preciso sobre el movimiento del personaje y su colisionador.

    -- Sí, lo he usado también, de echo lo hice con el rigidbody y lo adapté luego, el personaje se mueve perfectamente, es la capsula la que no quiere despegarse del suelo ni aunque la paguen, jajajaja.

    Espero que alguna de estas soluciones te ayude a resolver tu problema. Recuerda que en algunos casos, puede ser necesario combinar varias soluciones para lograr el resultado deseado. ¡Buena suerte!

    Quedo atento al tema de centrar automáticamente la capsula, a ver si puede estar por ahí el tema.

    Muchas gracias y un saludo.

  7. #7
    Fecha de ingreso
    Apr 2022
    Mensajes
    17
    Buenas,

    perdona que te vaya contestando uno a uno, pero no sé como contestar a todos de golpe y por no perder nada prefiero contestar citando.

    Como te comentaba, lo tenía todo programado con RigidBody, pero no me gusta lo que pasa con las paredes, es más, incluso en los enemigos como los tengo con agentes de navegación. cuando despliegan los brazos, no se salen de la pared los cuerpos, porque lo tengo limitado, pero los brazos atraviesan la misma. En el caso de los enemigos lo puedo controlar un poco mejor que el personaje y por código lo puedo dejar más fino, pero claro, lo que tengo como collider es una capsula y cuando se estiran los brazos sería cuestión de activar un collider que cubra eso, ya que no quiero que toda esa parte de abajo que no es personaje se detecte como colisión.

    En el player incluso he llegado a activar un mesh collider a lo bruto para ver qué pasaba pero el efecto es exactamente el mismo, los brazos por narices en cuanto entra la animación atraviesan los muros.

    Por eso te comentaba que descarté el RigidBody, la gravedad como sabes por código la emulamos igualmente.

    Muchas gracias y un saludo.

    Cita Iniciado por 3dpoder Ver mensaje
    El componente "Rigidbody" es una alternativa al character controller que ofrece algunas ventajas e inconvenientes.

    Ventajas:

    Realismo físico: El "Rigidbody" utiliza la física realista para simular los movimientos del personaje, lo que puede hacer que los movimientos sean más naturales y creíbles.

    Interacción con el entorno: El "Rigidbody" permite que el personaje interactúe con el entorno de una manera más realista. Por ejemplo, el personaje puede empujar objetos, saltar más alto en una plataforma elevada, o caer al suelo de manera realista.

    Colisiones: El "Rigidbody" gestiona automáticamente las colisiones con otros objetos, lo que puede simplificar el proceso de programación.

    Inconvenientes:

    Más complejidad: El "Rigidbody" puede ser más complejo de programar y configurar que el character controller, especialmente si se desea un comportamiento preciso.

    Menor control sobre el movimiento: El "Rigidbody" utiliza la física realista para simular los movimientos, lo que significa que el programador tiene menos control sobre la velocidad y la dirección del movimiento del personaje.

    Más uso de recursos: El "Rigidbody" puede ser más intensivo en recursos que el character controller, lo que puede afectar el rendimiento del juego en computadoras más antiguas o con recursos limitados.

    En resumen, el uso del "Rigidbody" puede ofrecer ventajas en términos de realismo físico e interacción con el entorno, pero puede ser más complejo de programar y consumir más recursos del sistema que el character controller. La elección entre los dos dependerá de las necesidades específicas del juego y las habilidades del programador.

  8. #8
    Fecha de ingreso
    Apr 2022
    Mensajes
    17
    Buenas, pues es muy parecido al código que ejecuto cuando lo tengo con RigidBody, lo único que para no estar con el Time.deltaTime lo que hago es usar el transform forward, right y up, sobre los que calculo posición * velocidad y luego utilizo el velocity de transform, pero en definitiva muy parecido, lo probaré por si hace que se comporte diferente en ejecución, pero esto lo hacía antes de que salieran otras propiedades en Unity que para lo que es caminar y correr creo que van mejor. Sí es cierto que para el salto independientemente del método uso el AddForce, tal y como indicas, para el character controller no uso esto, porque no funcionaría.

    Voy a probar a cambiarlo a esta forma a ver si gano algo.

    Muchas gracias y un saludo.

    Cita Iniciado por 3dpoder Ver mensaje
    Este script tiene una variable de velocidad para controlar el movimiento del personaje, una variable de fuerza de salto para el salto y una variable de fuerza de voltereta para controlar la voltereta del personaje. También hay una variable de duración de voltereta para controlar cuánto tiempo debe durar la voltereta.

    El script utiliza la función Translate para mover el personaje horizontalmente y la función AddForce para hacer que el personaje salte. También utiliza una corutina para controlar la voltereta del personaje y desactiva la gravedad y el movimiento horizontal mientras se realiza la voltereta.

    El script también tiene una función OnCollisionEnter que comprueba si el personaje está en el suelo o no. Si el personaje está en el suelo, se establece la variable isGrounded en true para permitir que el personaje salte de nuevo.

    Código:
    using UnityEngine;
    
    public class CustomController : MonoBehaviour
    {
        public float speed = 5f;               // Velocidad de movimiento del personaje
        public float jumpForce = 7f;           // Fuerza de salto del personaje
        public float rollForce = 10f;          // Fuerza de voltereta del personaje
        public float rollDuration = 0.5f;      // Duración de la voltereta del personaje
    
        private bool isGrounded;               // Variable para comprobar si el personaje está en el suelo
        private Rigidbody rb;                  // Componente RigidBody del personaje
    
        private void Start()
        {
            rb = GetComponent<Rigidbody>();   // Obtenemos el componente RigidBody del personaje
        }
    
        private void Update()
        {
            // Movimiento horizontal del personaje
            float horizontal = Input.GetAxis("Horizontal");
            transform.Translate(Vector3.right * horizontal * speed * Time.deltaTime);
    
            // Salto del personaje
            if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
            {
                rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
                isGrounded = false;
            }
    
            // Voltereta del personaje
            if (Input.GetKeyDown(KeyCode.LeftShift))
            {
                StartCoroutine(Roll());
            }
        }
    
        private void OnCollisionEnter(Collision collision)
        {
            // Comprobar si el personaje está en el suelo
            if (collision.gameObject.CompareTag("Ground"))
            {
                isGrounded = true;
            }
        }
    
        private IEnumerator Roll()
        {
            // Desactivar la gravedad y el movimiento horizontal
            rb.useGravity = false;
            float horizontal = Input.GetAxis("Horizontal");
            transform.Translate(Vector3.right * -horizontal * rollForce * Time.deltaTime);
    
            // Realizar la voltereta
            yield return new WaitForSeconds(rollDuration);
    
            // Reactivar la gravedad y el movimiento horizontal
            rb.useGravity = true;
            transform.Translate(Vector3.right * horizontal * rollForce * Time.deltaTime);
        }
    }

  9. #9
    Fecha de ingreso
    Apr 2022
    Mensajes
    17
    Buenas, pues en esto sí que no me había metido, para lo que uso en el peque juego con los colliders y los triggers me apañaba bien, no quería meter temas de RayCast por mi ordenador que es un portátil un poco antiguo (es el que uso para estas cosas, el otro prefiero no tocarlo, porque lo uso habitualmente para el trabajo), no buscaba tanto lío, porque al final sólo quiero poder entregar el TFG en tiempo y ya cuando termine meterme más en serio. :D

    Pero si esto puede funcionar lo pondré en práctica, porque ya estoy desesperado.

    Muchas gracias y un saludo.

    Cita Iniciado por 3dpoder Ver mensaje
    Te dejo un ejemplo de script que permite que el personaje interactúe con objetos en el mundo que le rodea y reconozca los mismos, es un código base, a partir de ahí puedes ampliarlo tanto como quieras.

    En este ejemplo, el script utiliza un Raycast para detectar si hay un objeto interactuable dentro de una distancia específica y en una capa determinada. Si se detecta un objeto interactuable, se llama al método Interact() del componente Interactable asociado con el objeto. Puedes personalizar la distancia y la capa de detección para adaptarse a tus necesidades.

    Para utilizar este script, deberás crear un nuevo script llamado Interact y adjuntarlo a tu personaje en el editor de Unity. Asegúrate de agregar también un componente de cámara a tu personaje si no lo has hecho ya, para poder usarla en el Raycast.

    Luego, en cada objeto del mundo del juego que desees que sea interactuable, deberás crear un componente de tipo Interactable y personalizarlo para que haga lo que quieras que haga cuando se interactúa con él.

    Espero que esto te sea útil.

    Código:
    using UnityEngine;
    
    public class Interact : MonoBehaviour
    {
        public float interactDistance = 2f;
        public LayerMask interactLayer;
    
        private Camera playerCam;
    
        private void Start()
        {
            playerCam = Camera.main;
        }
    
        private void Update()
        {
            if (Input.GetKeyDown(KeyCode.E))
            {
                RaycastHit hit;
                if (Physics.Raycast(playerCam.transform.position, playerCam.transform.forward, out hit, interactDistance, interactLayer))
                {
                    Interactable interactable = hit.collider.GetComponent<Interactable>();
                    if (interactable != null)
                    {
                        interactable.Interact();
                    }
                }
            }
        }
    }

  10. #10
    Fecha de ingreso
    Apr 2002
    Mensajes
    25,945
    Cita Iniciado por fmayosi Ver mensaje
    Quedo atento al tema de centrar automáticamente la cápsula, a ver si puede estar por ahí el tema.
    La opción "Automatic" para ajustar el centro de la cápsula en el CharacterController se encuentra en el componente "Capsule Collider" que se agrega automáticamente al crear un nuevo CharacterController en Unity. Intenta lo siguiente a ver si te aparece:

    • Selecciona el objeto que tiene el CharacterController y haz clic en el botón "Add Component" en la ventana "Inspector".
    • Busca el componente "Capsule Collider" y haz clic en él para agregarlo al objeto.
    • En la sección "Center", verás la opción "Edit Collider". Haz clic en ella y se abrirá una ventana emergente.
    • En la ventana emergente, verás la opción "Center" con un botón desplegable al lado. Haz clic en el botón desplegable y selecciona la opción "Auto".
    • Una vez seleccionada la opción "Auto", la cápsula se ajustará automáticamente a la posición del personaje.


    Espero que esto te ayude a encontrar la opción "Automatic" para ajustar el centro de la cápsula en el CharacterController de Unity.
    |Agradecer cuando alguien te ayuda es de ser agradecido|

  11. #11
    Fecha de ingreso
    Apr 2022
    Mensajes
    17
    Buenas, perdona 3dpoder, entiendo lo que me indicas, pero no veo que realmente esto esté en unity.

    Me explico, cuando añades el character controller, en sí ya es la capsula, tienes en el inspector la parte de "Center" y puedes modificar los parámetros para ajustarlo. Si añado un capsule Collider, realmente sería a parte del que realmente pone el character controller, pero en este caso, aunque sí tienes la opción de editar el collider, no aparece en una nueva ventana, si no que te permite modificar con el puntero del ratón directamente los puntos de la capsula.

    Y aunque abras las propiedades para que las despliegue en una ventana nueva no hay una opción como la que indicas. Por defecto cuando creas la capsula o el character controller si el modelo es correcto ya te aparece centrado.

    No sé si hay algo que no esté viendo o haciendo bien, pero como ves no aparece dicha opción.

    Muchas gracias y un saludo.

    Cita Iniciado por 3dpoder Ver mensaje
    La opción "Automatic" para ajustar el centro de la cápsula en el CharacterController se encuentra en el componente "Capsule Collider" que se agrega automáticamente al crear un nuevo CharacterController en Unity. Intenta lo siguiente a ver si te aparece:

    • Selecciona el objeto que tiene el CharacterController y haz clic en el botón "Add Component" en la ventana "Inspector".
    • Busca el componente "Capsule Collider" y haz clic en él para agregarlo al objeto.
    • En la sección "Center", verás la opción "Edit Collider". Haz clic en ella y se abrirá una ventana emergente.
    • En la ventana emergente, verás la opción "Center" con un botón desplegable al lado. Haz clic en el botón desplegable y selecciona la opción "Auto".
    • Una vez seleccionada la opción "Auto", la cápsula se ajustará automáticamente a la posición del personaje.


    Espero que esto te ayude a encontrar la opción "Automatic" para ajustar el centro de la cápsula en el CharacterController de Unity.

  12. #12
    Fecha de ingreso
    Apr 2002
    Mensajes
    25,945
    Si necesitas subir imágenes o archivos al foro, utiliza el método recomendado en este enlace.

    La imagen no la puedo ver, algo le ha ocurrido, usa este sistema que te indico para publicar imágenes. De todas formas entiendo lo que me dices, voy a investigar un poco más a ver si encuentro algo, o el porqué.

    Un saludo.
    |Agradecer cuando alguien te ayuda es de ser agradecido|

  13. #13
    Fecha de ingreso
    Apr 2022
    Mensajes
    17
    Buenas, muchas gracias y disculpa.

    Añado la imagen de manera correcta:
    Clic en la imagen para ver su versión completa. 

Nombre: Colliders.jpg 
Visitas: 35 
Tamaño: 274.7 KB 
ID: 245072

    Cita Iniciado por 3dpoder Ver mensaje
    Si necesitas subir imágenes o archivos al foro, utiliza el método recomendado en este enlace.

    La imagen no la puedo ver, algo le ha ocurrido, usa este sistema que te indico para publicar imágenes. De todas formas entiendo lo que me dices, voy a investigar un poco más a ver si encuentro algo, o el porqué.

    Un saludo.

  14. #14
    Fecha de ingreso
    Apr 2002
    Mensajes
    25,945
    Gracias por la aclaración. Tienes razón en que el centro del Character Controller se puede ajustar directamente en el inspector y no es necesario agregar un Collider adicional. El centro del Character Controller determina la posición del objeto en el mundo y puede ser ajustado para que el personaje se mueva correctamente y se sienta bien controlado.

    El Collider, en este caso, se utiliza para detectar colisiones con otros objetos en la escena. Si bien es posible ajustar los puntos del Collider directamente en el inspector, también se puede utilizar la herramienta de manipulación de Collider para ajustar los puntos de colisión de forma más precisa.
    |Agradecer cuando alguien te ayuda es de ser agradecido|

  15. #15
    Fecha de ingreso
    Apr 2022
    Mensajes
    17
    Buenas, sí, lo que indicas es correcto. El problema es que si añado tanto un character como una cápsula, si activo el trigger en objetos, la detección se realizará dos veces. Es cierto que puedo controlarlo por programa, pero no sería necesario.

    El centro de la cápsula está bien posicionado, tal como indiqué, tanto al andar como al correr, y en cualquier cambio de dirección todo va bien. El problema es en el eje Y, pero solo con la cápsula, ya que el personaje se mueve bien. Voy a buscar alguna solución temporal tipo "apaño" porque se me acaba el tiempo para entregar el proyecto, pero seguiré investigando este tema. Además, si utilizo un cubo o una cápsula en el hips, la cápsula sigue la malla sin problemas.

    Gracias por tu tiempo, a ver si encuentro una buena solución.

    Muchas gracias y un saludo.

    Cita Iniciado por 3dpoder Ver mensaje
    Gracias por la aclaración. Tienes razón en que el centro del Character Controller se puede ajustar directamente en el inspector y no es necesario agregar un Collider adicional. El centro del Character Controller determina la posición del objeto en el mundo y puede ser ajustado para que el personaje se mueva correctamente y se sienta bien controlado.

    El Collider, en este caso, se utiliza para detectar colisiones con otros objetos en la escena. Si bien es posible ajustar los puntos del Collider directamente en el inspector, también se puede utilizar la herramienta de manipulación de Collider para ajustar los puntos de colisión de forma más precisa.

Página 1 de 2 12 ÚltimoÚltimo

Temas similares

  1. Exportar a Unity desde Autodesk Maya con FBX
    Por fmayosi en el foro Videojuegos
    Respuestas: 3
    : 02-04-2023, 17:39
  2. Versión de Unity con Animator Controller?
    Por Jhonatan00_00 en el foro Videojuegos
    Respuestas: 2
    : 26-12-2018, 20:36
  3. No aparece correctamente el modelo importado en fbx
    Por 3J Kernel en el foro Postproducción
    Respuestas: 0
    : 17-07-2014, 00:05
  4. ZBrush No puedo editar modelo importado ZTL
    Por Bicss en el foro Programas de Diseño 3D y CAD
    Respuestas: 2
    : 26-03-2012, 20:02
  5. Problema con modelo 3d importado desde AutoCAD
    Por Michael Vazquez en el foro Modelado
    Respuestas: 1
    : 05-06-2008, 10:31

Etiquetas para este tema