3dpoder

Matemáticas Unity

  • #1
    Jhonatan00_00 está desconectado

    Usuario completo Avatar de Jhonatan00_00


    Matemáticas Unity solucionado

    Buenas tardes, estoy intentando programar un detalle para la cámara y se trata básicamente de que al dejar de movernos, si no tocamos ninguna tecla la cámara se reposicione justo detras del personaje.

    Esto se consigue con transform.RotateAround, un comando de Unity que hace que un objeto pueda girar alrededor de otro y que pide 3 datos para funcionar:
    transform.RotateAround (Centro de rotación (el personaje), Eje sobre el que girara el objeto (eje Y de la camara), Ángulo a sumar o restar para que gire (Ecuación) *Time.deltaTime);

    El problema es que aquí entran las matemáticas y creo que esto tiene algo que ver con el seno y el coseno, pero no encuentro la ecuación para poner en su lugar y que la cámara sepa cuanto tiene que rotar.
    ¿Alguna idea? Saludos.

    Última edición por Jhonatan00_00; 25-01-2020 a las 00:26


  • #2
    natros está desconectado

    Usuario completo


    Matemáticas Unity

    No creo que sea necesario, crea unas variables para la posicion actual de la camara en los tres ejes, haz un bucle if para alcanzar la posicion que quieres alcanzar, que es fija relativa al personaje, y ve sumando/restando grados
    si quieres hacerlo más fluido realiza una suma/resta entre ambos valores, actual y objetivo, divide ese valor entre el tiempo que quieras que pase la camara moviendose y en cada ciclo con time.deltatime añade/sustrae segun corresponda, ese valor, seria algo así como:
    x= posicion actual x
    y= posicion actual y
    z= posicion actual z
    si(x>=180)//para el ejemplo pongo todos los valores objetivos en 180º

    rango x = objetivo X – x

    si (x<180)

    rango x = objetivo x + x

    lo mismo para y
    lo mismo para z
    //supongamos que queremos que tarde 4 segundos en ponerse detras
    actualizacion x = rango x/4.

    mientras x sea distinto de objetivo x

    si (x>=180)

    x = x – rango x

    si (x<180)

    x = x + rango x

    .

    no se si sera mas corto o más facil con senos y cosenos…pero no creo que sea necesario
    .


  • #3
    Jhonatan00_00 está desconectado

    Usuario completo Avatar de Jhonatan00_00


    Matemáticas Unity

    Buenas tardes, más o menos así lo programé hace mucho tiempo cuando el proyecto lo estaba llevando a cabo con Blitz3D y no fue nada fácil porque cada objeto (la cámara y el personaje) puede encontrarse mirando a mas de 180º o a menos de 180º y pueden darse 4 situaciones diferentes que tienes que ir programando según el caso, es largo y tedioso. Además con el inconveniente de que la cámara tiene que volver a su posición detrás del personaje pero por el camino mas corto y a veces tiene que pasar por 0º.

    Por eso pregunto, por si hay alguna función como Quaternion.Slerp por ejemplo o alguna ecuación matemática que me calcule ya todas las posiciones que pueden tener estos dos objetos y me ahorre todo el trabajo (que al final tendré que volver a hacerlo de la forma que dices). Un saludo.


  • #4
    Flash-Original está desconectado

    Usuario Novato


    Matemáticas Unity

    Yo no he programado en Unity pero teoricamente (al menos a mi) si es en 3º persona no seria mejor calcular la x distancia del personaje y siempre redirigirlo ahí o sea seria algo
    si la camara no se mueve en X tiempo volver a ubicacion del persona(puedes poner un hitbox en la cabeza para que tenga algún punto donde basarse)je + eje (x,y,z preescrito)


  • #5
    Jhonatan00_00 está desconectado

    Usuario completo Avatar de Jhonatan00_00


    Matemáticas Unity

    Buenas noches, encontré la solución hace tiempo pero olvide publicarla. Unity tiene ya una función que se encarga de buscar recorridos en ángulos pero por el camino más corto y se llama DeltaAngle. Con esa función y RotateAround se consigue. Saludos y gracias.


  • Ver más sobre el tema y los comentarios en el foro