Tema: Ayuda con scripts

Mensajes

  • redsch

    19 Ene 2014 17:07

    Mensajes: 35

    Ubicación: Barcelona

    redsch » 19 ENE 2014  17:16

    Buenas, estoy trabajando en un juego para open dive (el equivalente de oculus drift pero que utiliza el movil como pantalla y giroscopio). Sera un juego de plataformas y me seria de ayuda que alguien me dijera como hacer un script para lo siguiente (estoy utilizando Unity 3d), me gustaría que el personaje principal (que lleva la camara) se moviera constantemente en la dirección de esta. Hasta el momento he conseguido hacer un script que haga que mi personaje se mueva constantemente en una dirección, pero al girar la cámara, este sigue avanzando en la misma dirección y no cambia de dirección. El script que he hecho es este:

     

    #pragma strict

     

    var speed : float = 0.2;
    function Update () {
    this.transform.position.z += this.speed;
    }

     

    Se que lo que debería hacer seria cambiar la "z" por algún elemento que refiriera a la posición de la cámara, pero no lo he conseguido, alguien me podría decir por que elemento tengo que cambiar "z", gracias.

     

    PD: También me gustaría realizar un script que hiciera que al levantar la cabeza de golpe (como asintiendo mas o menos), el personaje realizara un salto, pero no se ni por donde empezar, gracias de nuevo.

    0
  • chikotron

    20 Jul 2013 23:47

    Mensajes: 153

    chikotron » 19 ENE 2014  17:46

    Para lo de el eje z, tendrias que ponerlo algo asi si no me equivoco (x,y, camera.transform.rotation) .

    0
  • redsch

    19 Ene 2014 17:07

    Mensajes: 35

    Ubicación: Barcelona

    redsch » 19 ENE 2014  17:53

    Te estoy muy agradecido por haberme dado una respuesta, lo he escrito como me dijiste, así:

     

    #pragma strict

     

    var speed : float = 0.2;
    function Update () {
    this.transform.position.(x,y, camera.transform.rotation) += this.speed;
    }

     

    Pero sigue sin funcionar, me dice que hay errores de compilación, que he hecho mal, alguna idea?

    0
  • crim3

    17 May 2013 01:00

    Mensajes: 686

    Ubicación: Valencia, Spain

    crim3 » 19 ENE 2014  18:27

    No tengo ni idea de Unity, pero como veo que lo que tienes es un problema de matemáticas más que de programación, te contesto por si te sirve.

     

    Tienes que tener en cuenta que para mover el personaje por el suelo en cualquier dirección necesitas dos componentes. Me imagino que Unity utiliza el plano X,Y como suelo. Asi que prueba algo así:

     

    this.transform.position.x-=this.speed*sin(yaw); //No sé si se suma o se resta, depende del sistema de coordenadas que use Unity. Yo siempre me hago un lío con eso
    this.transform.position.z += this.speed*cos(yaw);

     

    'yaw' sería la dirección en que está mirando la cámara.

     

    También sería conveniente saber cuanto tiempo pasa entre frame y frame y multiplicarlo por la velocidad para que el personaje se mueva a la misma velocidad independientemente de la tasa de frames.

    [size=85]PC gaming rulez :P[/size]

    0
  • chikotron

    20 Jul 2013 23:47

    Mensajes: 153

    chikotron » 19 ENE 2014  22:02

    xD , perdon , es asi Camera.main.transform.rotation .En el de antes faltaba en main , en camera es como llames a tu camara .

    0
  • redsch

    19 Ene 2014 17:07

    Mensajes: 35

    Ubicación: Barcelona

    redsch » 20 ENE 2014  11:09

    -Les estoy muy agradecido a todos por estar ayudandome con mi problemilla, pero soy un completo desastre en esto de la programmación, he probado una infinidad de combinaciones i ninguna resulta, la que parece estar mas cerca del Script correcto es esta:

     

    #pragma strict

     

    var speed : float = 0.2;
    function Update () {
    this.transform.position (x,y, Camera.main.transform.rotation) += this.speed;
    }

     

    -Pero me salta el siguiente error:

     

    Assets/Standard Assets/Character Controllers/Sources/Scripts/autowalk.js(6,26): BCE0005: Unknown identifier: 'x'.
    Assets/Standard Assets/Character Controllers/Sources/Scripts/autowalk.js(6,28): BCE0005: Unknown identifier: 'y'.

     

    -Asi que probé de declarar "x" y "y":

     

    #pragma strict

     

    var
    x, y : Integer;

     

    var speed : float = 0.2;
    function Update () {
    this.transform.position (x,y, Camera.main.transform.rotation) += this.speed;
    }

     

    -Pero me saltó este otro error:

     

    Assets/Standard Assets/Character Controllers/Sources/Scripts/autowalk.js(4,2): BCE0043: Unexpected token: ,.

     

    De verdad, les estoy extremadamente agradecido por estarme offreciendo su ayuda, y espero que esto no les resulte cansino y sigan ayudandome ya que sin este script, mi proyecto no puede continuar, gracias de nuevo.

    0
  • chikotron

    20 Jul 2013 23:47

    Mensajes: 153

    chikotron » 20 ENE 2014  15:08
    "redsch"-Les estoy muy agradecido a todos por estar ayudandome con mi problemilla, pero soy un completo desastre en esto de la programmación, he probado una infinidad de combinaciones i ninguna resulta, la que parece estar mas cerca del Script correcto es esta:

    #pragma strict

    var speed : float = 0.2;
    function Update () {
    this.transform.position (x,y, Camera.main.transform.rotation) += this.speed;
    }


    -Pero me salta el siguiente error:

    Assets/Standard Assets/Character Controllers/Sources/Scripts/autowalk.js(6,26): BCE0005: Unknown identifier: 'x'.
    Assets/Standard Assets/Character Controllers/Sources/Scripts/autowalk.js(6,28): BCE0005: Unknown identifier: 'y'.

     

    Ahi el problema, no es que este sin declarar , sino que x e y no son un valor numerico.
    "this.transform.position (x,y, Camera.main.transform.rotation) += this.speed;" ahi le estas pidiendo que mueva la posicion de ese elemento a el punto (x,y,z)
    entonces, el programa, al leer el script te esta diciendo "Oye que x e y no son valores que puedan usar para representar un objeto en el espacio", por lo que te los declara como Unknown (desconocido) .
    Asi a lo rapido, para representar un punto en el espacio se necesitan tres apartados :
    X -> seria la distancia de en horizontal con respecto a un punto (por asi decirlo, el ancho).
    Y -> seria la altura.
    Z-> la profundidad.

     

    Entonces no puedes dejarlo como (x,y,Camera.main.transform.rotation) porque "Camera.main.transform.rotation" , es el numero que equivale a la rotacion de la camara, pero x e y no son ningun numero.
    Si quieres que se mantenga en el mismo sitio si no me equivoco, seria algo asi : (this.main.transform.position,this.main.transform.position,Camera.main.transform.rotation);

     

    Saludos, chikotron .

    0
  • Juanlo

    Moderador

    11 May 2013 12:53

    Mensajes: 7862

    Ubicación: Murcia (España)

    Juanlo » 20 ENE 2014  16:30

    Lo muevo al subforo de programación

    0
  • chikotron

    20 Jul 2013 23:47

    Mensajes: 153

    chikotron » 25 ENE 2014  0:16

    ¿Como te fue compañero?

    0

Usuarios navegando por este foro:

3 Anónimo