Como Hacer Una Camara En Primera Persona Unity - Como Hacer Un FPS En Unity

แชร์
ฝัง
  • เผยแพร่เมื่อ 15 ก.ย. 2024
  • En este video aprenderás a crear una cámara para juegos en primera persona utilizando Unity.
    Comenzaremos hablando de mouse lock (cursorLock) para que el cursor se mantenga en la ventana del juego y no vallamos a dar clic accidentalmente fuera de la ventana.
    Luego haremos la rotación horizontal con el mouse, esta va a rotar a nuestro objeto de capsula ya que esto nos permitirá movernos hacia adelante sin importar a que dirección estemos mirando.
    Sin embargo, la rotación vertical estará adherida a nuestro objeto de cámara ya que si rotamos la capsula puede hacer que el movimiento hacia adelante sea también un movimiento vertical.
    Finalizaremos añadiendo unos limites a la rotación de la cámara para que no lo podamos colocar de cabezas.
    Para más tutoriales sobre como programar en unity 3D y como hacer un fps en untiy sigue la siguiente lista:
    • Mecánicas Juegos FPS U...
    No olvides dar like y suscribirte al canal.
    También puedes seguirme en Twitter para cualquier duda que puedas tener en, me puedes encontrar como Jucarave, o con el siguiente link:
    bit.ly/3jgNjy7

ความคิดเห็น • 77

  • @insideunity
    @insideunity  2 ปีที่แล้ว +3

    Seguiré subiendo videos en mi otro canal ya que me queda más fácil de controlar el contenido y los comentarios, suscríbete a Jucarave si te interesa el tema: th-cam.com/users/jucarave

    • @thenekogl8764
      @thenekogl8764 7 หลายเดือนก่อน

      es normal que a la hora de poner el código las letras no se me pongan de otro color?

  • @tremerin7323
    @tremerin7323 3 ปีที่แล้ว +5

    Estupendo tutorial. Ya que has preguntado por sugerencias sobre que tipo de juegos nos gustaría ver por el canal propongo uno: RTS (estrategia en tiempo real).

    • @insideunity
      @insideunity  3 ปีที่แล้ว

      interesante, sería un buen desafío. Muchas gracias por la sugerencia! Saludos

  • @cristophergarcia8218
    @cristophergarcia8218 3 ปีที่แล้ว

    te lo juro que e visto mas de 10 videos y solo el tuyo a funciona GRACIAS

  • @Dazusxd
    @Dazusxd 2 ปีที่แล้ว +1

    De ver tantos videos este si funciona gracias (Sub ADQUIRIDO)

  • @pol449
    @pol449 ปีที่แล้ว

    se que a esta altura ya lo debes saber, pero cada que lo escucho me dan ganas de corregir: es "sensitivity", no "sensibility". Sin embargo, tienes una muy buena forma de explicar y hace muy fácil el aprendizaje.

  • @adrii_1949
    @adrii_1949 ปีที่แล้ว +1

    Muchas gracias amigo, te explicastes muy bien y fue facil de entender

  • @meth2326
    @meth2326 2 ปีที่แล้ว +1

    no me sirvio pero porque no puedo mover la camara del editor osea esta parada y no puedo mover la camara no importa que ya probe con todo y no se que hacer

  • @thenekogl8764
    @thenekogl8764 7 หลายเดือนก่อน +2

    es normal que a la hora de poner el código las letras no se me pongan de otro color?

  • @rotigames789
    @rotigames789 2 ปีที่แล้ว +3

    bro necesito ayuda, tu codigo para el movimiento de camara no me funciono pero encontre otro que si me funciono. es este.
    {
    public float speedH = 2.0f;
    public float speedV = 2.0f;
    private float yaw = 0.0f;
    private float pitch = 0.0f;
    // Start is called before the first frame update
    void Start()
    {
    Cursor.lockState = CursorLockMode.Locked;
    }
    // Update is called once per frame
    void Update()
    {
    yaw += speedH * Input.GetAxis("Mouse X");
    pitch -= speedV * Input.GetAxis("Mouse Y");
    transform.eulerAngles = new Vector3(pitch , yaw , 0.0f);
    }
    }
    Pero como dijiste en el 4:48 cuando rota la camara. pero las flechitas y y x de la capsula no se mueven. osea si yo
    volteo mi camara 90 grados si le doy a W no se mueve hacia adelante, se mueve hacia a la izquierda aunque este
    mirando a otro lugar. plz ayuda

    • @esmike5580
      @esmike5580 2 ปีที่แล้ว

      cosas del destino lo dejemos asi, ami me funciono este asi que gracias

    • @podeischupadmelapolla777
      @podeischupadmelapolla777 2 ปีที่แล้ว +1

      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      public class (Aca el nombre del Script que creaste) : MonoBehaviour
      {
      private new Transform camera;
      public Vector2 sensibility;
      // Start is called before the first frame update
      void Start()
      {
      camera = transform.Find("Nombre de tu camara");
      Cursor.lockState = CursorLockMode.Locked;
      }
      // Update is called once per frame
      void Update()
      {
      float hor = Input.GetAxis("Mouse X");
      float ver = Input.GetAxis("Mouse Y");
      if (hor != 0) {
      transform.Rotate(Vector3.up * hor * sensibility.x);
      }
      if (ver != 0) {
      //camera.Rotate(Vector3.left * ver * sensibility.y);
      float angle = (camera.localEulerAngles.x - ver * sensibility.y + 360) % 360;
      if (angle > 180) { angle -= 360; }
      angle = Mathf.Clamp(angle, -60, 60);
      camera.localEulerAngles = Vector3.right * angle;
      }
      }
      }

  • @podeischupadmelapolla777
    @podeischupadmelapolla777 2 ปีที่แล้ว +2

    Como hago cuando quiero poner algo q siempre este en la camara pero cuando volteo hacia arriba no lo sigue q hago

    • @JUNICAKanima
      @JUNICAKanima 5 หลายเดือนก่อน +1

      colocalo en una capa distinta

  • @Efrain_xD
    @Efrain_xD ปีที่แล้ว +2

    lo malo de esto es al poner localEulerAngles la camara esta mirando al otro lado en vez de estar mirando al frente y esto hace que los controles del movimiento se inviertan (AYUDA SI ALGUIEN SABE COMO PODER CAMBIA LA POSICION DE LA CAMARA)

  • @poloshii
    @poloshii 3 ปีที่แล้ว +2

    Como tienes la configuracion de Visual Studio?

  • @whyfy6010
    @whyfy6010 2 ปีที่แล้ว

    dios mae que salvada sos un crack :) gracias

  • @gonzalosantaellamaraver6814
    @gonzalosantaellamaraver6814 ปีที่แล้ว

    NullReferenceException: Object reference not set to an instance of an object
    micontroladorfps.FixedUpdate () (at Assets/scrips/micontroladorfps.cs:50)
    me sale este error ayuda

  • @agustinlopez2370
    @agustinlopez2370 3 ปีที่แล้ว +1

    Excelente, una pregunta! porqué la rotación lo colocaste en update y no en fixedupdate?

  • @hggabriel6176
    @hggabriel6176 3 ปีที่แล้ว

    Bastante útil, me funciono

  • @FlixYTS
    @FlixYTS ปีที่แล้ว

    grax

  • @rodriguezfranciscosalvador4831
    @rodriguezfranciscosalvador4831 3 ปีที่แล้ว

    muy buen video, gracias.

  • @Hakuryuu.978
    @Hakuryuu.978 5 หลายเดือนก่อน

    Unity me esta dando el siguiente error,
    NullReferenceException: Object reference not set to an instance of an object
    camara.Update () (at Assets/scrips/camara.cs:34)

    • @Stteekuuu
      @Stteekuuu 5 หลายเดือนก่อน

      x2 si encuentras el error, agradeceria que lo pasaras, si lo encuentro te lo proporcionaré

  • @sergiopamplona1676
    @sergiopamplona1676 ปีที่แล้ว

    Hola, yo lo tengo hecho para que el objeto rote, con el teclado, con las flechas de los lados, pero al mover para lante, no guarda la rotacion, y avanza en el eje Z a 0, como podria solucionalo
    Gracias

  • @agus.vell5
    @agus.vell5 3 ปีที่แล้ว

    gracias amigo elunico tutorial que me funciono :)

    • @guillermoortega4268
      @guillermoortega4268 2 ปีที่แล้ว

      como ha hecho la bomilla al lado de cursor
      lock...

  • @SamuLXSSS
    @SamuLXSSS 2 ปีที่แล้ว

    El codigo que yo tenía solo se movia hacia los lados gracias bro!!!!!!!!!!!!

  • @maxisanchez4459
    @maxisanchez4459 3 ปีที่แล้ว +1

    gracias me sirvio de mucho

    • @insideunity
      @insideunity  3 ปีที่แล้ว

      Gracias por el apoyo

  • @elmija3594
    @elmija3594 2 ปีที่แล้ว

    me sale un error que dice "Camera does not contain d definition dor localEulerAngles" que hago porfavor aiuda

  • @joantisdale7044
    @joantisdale7044 2 ปีที่แล้ว +1

    He puesto que rote también con las teclas y cuando le doy por ejemplo a Q para rotar se queda rotando infinitamente :c y si clico a rotar arriba o abajo se mezclan y rota en todas direcciones, una locura.

  • @ProDemon664
    @ProDemon664 3 ปีที่แล้ว

    exelente video

  • @franzty4268
    @franzty4268 3 ปีที่แล้ว

    hola ayuda el eje z de la camara tambien se mueve que hago?

  • @freddyanimation1492
    @freddyanimation1492 2 ปีที่แล้ว

    al hacer este script me salen muchos erores no se si solo funciona en la vercion 2019 yo tengo la vercion 2022

  • @icof6068
    @icof6068 2 ปีที่แล้ว

    Hola que paquetes necesito descargar a visual studio?

  • @Pupupuuuma
    @Pupupuuuma 10 หลายเดือนก่อน

    Gente, porque cuando miro atrás y le doy a la W va hacia atrás? XD

  • @mat1as116
    @mat1as116 3 ปีที่แล้ว +2

    Hola no me dunciona la rotacion para arrriba

    • @TheBrothasMC
      @TheBrothasMC 3 ปีที่แล้ว

      igual

    • @elcaido8436
      @elcaido8436 3 ปีที่แล้ว

      tu tienes en el script: camera = transform.Find("Camera");
      Intenta camera = transform.Find("Main Camera");

  • @josebaanimacion5402
    @josebaanimacion5402 2 ปีที่แล้ว

    como se pone limites a la rotación horizontal??

  • @HolaSoyGatoXD-262
    @HolaSoyGatoXD-262 3 หลายเดือนก่อน

    papuu como se llama el programa que usas para los scripts, es dificil con el bloc de notas

    • @CodeXpert-c6d
      @CodeXpert-c6d 18 วันที่ผ่านมา +1

      Visual Studio Code si te interesa aunque ni venga del creador y fue hace banda :)

  • @santiagomorantes2601
    @santiagomorantes2601 10 หลายเดือนก่อน

    el Vector no me sale verde, atyuda!!

    • @WerMol_
      @WerMol_ 6 หลายเดือนก่อน +1

      Realmente no importa, igual a mi no me sale y me funciona bien los códigos

  • @thekevin9951
    @thekevin9951 2 ปีที่แล้ว

    Tengo un problema, en el script: camara.Rotate(Vector3.left * ver * sensibility.y); min: 09:47 . . . . En la parte de ''ver'' me sale este error: The name 'ver' does not exist. in the current context, alguien sabe como arreglarlo?

    • @valentinroldan545
      @valentinroldan545 2 ปีที่แล้ว

      Buenas, eso te sale porque abajo en los if no debes estar usando la misma variable que declaraste arriba (ver)

    • @thekevin9951
      @thekevin9951 2 ปีที่แล้ว +1

      @@valentinroldan545 Ah sisi, ya vi muchas gracias!

  • @jupiterhuguet6732
    @jupiterhuguet6732 ปีที่แล้ว

    tengo un problema i es que al girar la camara hacia abajo o hacia arriba mientras me muevo el personaje atraviesa el suelo o sale volando, y si tiene el RigidBody i el Collider pero como el codigo le dice que vaya hacia alli se buguea i atraviesa el suelo, las paredes no.
    Si alguien me puede ayudar :(

    • @JUNICAKanima
      @JUNICAKanima 5 หลายเดือนก่อน

      AÑADELE COLOSION AL PISO

  • @tadeopace3182
    @tadeopace3182 2 ปีที่แล้ว

    Hola no puedo agregar FPSCamera a el jugador que en tu caso es capsule, me puedes explicar porque no me funciona. Me aparece: Can´t add script component "FPSCamera" because the script class dass cannot be found

    • @kanekiamvs5079
      @kanekiamvs5079 2 ปีที่แล้ว

      x2 ya resolviste el problema ?

    • @tadeopace3182
      @tadeopace3182 2 ปีที่แล้ว

      @@kanekiamvs5079 No se, se me soluciono haciendo otro proyecto y metiendo el c# antes de meter el script

  • @davi_x0289
    @davi_x0289 ปีที่แล้ว

    juracave?

  • @uncuberomallorquin2637
    @uncuberomallorquin2637 2 ปีที่แล้ว

    Una cosa bro no se porque pero la camara se me cae por el RigidBody ayuda pls

  • @cristopheradansantiagolara515
    @cristopheradansantiagolara515 2 ปีที่แล้ว

    Banda, me aparece el error CS1513: }
    Estoy poniendo todo tal cual como en el video pero aparece eso, alguie sabria como solucionarlo o que lo este causando
    ?

    • @podeischupadmelapolla777
      @podeischupadmelapolla777 2 ปีที่แล้ว +1

      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      public class (Aca el nombre del Script que creaste) : MonoBehaviour
      {
      private new Transform camera;
      public Vector2 sensibility;
      // Start is called before the first frame update
      void Start()
      {
      camera = transform.Find("Nombre de tu camara");
      Cursor.lockState = CursorLockMode.Locked;
      }
      // Update is called once per frame
      void Update()
      {
      float hor = Input.GetAxis("Mouse X");
      float ver = Input.GetAxis("Mouse Y");
      if (hor != 0) {
      transform.Rotate(Vector3.up * hor * sensibility.x);
      }
      if (ver != 0) {
      //camera.Rotate(Vector3.left * ver * sensibility.y);
      float angle = (camera.localEulerAngles.x - ver * sensibility.y + 360) % 360;
      if (angle > 180) { angle -= 360; }
      angle = Mathf.Clamp(angle, -60, 60);
      camera.localEulerAngles = Vector3.right * angle;
      }
      }
      }

    • @krieg10
      @krieg10 ปีที่แล้ว

      lo arreglaste yo copie todo como sale en el video y me marca el mismo error

  • @leox738
    @leox738 2 ปีที่แล้ว

    codigo escrito please ?

  • @cram13yel14
    @cram13yel14 2 ปีที่แล้ว

    no me funciona, podria ser pq uso visual studio?

    • @CodeXpert-c6d
      @CodeXpert-c6d 18 วันที่ผ่านมา

      el tmb lo usa, explica porque no funciona

  • @facumasri9453
    @facumasri9453 3 ปีที่แล้ว

    hola amigo una pregunta, yo hice que al mover la camara horizontalmente tmb rote el jugador pero cuando voy para adelante pormas que gire pormas que el personaje mire para el otro lado, igualmente sigue caminando para donde miraba antes, el caso es que investige y me di cuenta que pasa porque estoy moviendo las cordenadas globales y tengo que usar las locales el caso es: ¿como hago para utilizar cordenadas locales en vez de globales? aclaro que estoy haciendo el movimiento con el character controler y uso la version de unity 5 saludos!

    • @macroj04
      @macroj04 3 ปีที่แล้ว +1

      lo mismo pregunto

    • @facumasri9453
      @facumasri9453 3 ปีที่แล้ว

      @@macroj04 si encontras la solucion decime que no me sale JASJAAJ

    • @macroj04
      @macroj04 3 ปีที่แล้ว

      @@facumasri9453 jajaj resulta que lo explica en el video siguiente en la lista de reproducción en la que está este video

    • @facumasri9453
      @facumasri9453 3 ปีที่แล้ว

      @@macroj04 jjajajjaa gracias

  • @wildbluelucas
    @wildbluelucas 3 ปีที่แล้ว

    La variable Clamp me da error dice que no hay sobrecarga para el método clamp toma 2 argumentos

  • @ch2754
    @ch2754 ปีที่แล้ว

    Yo lo resolvi asi.
    [SerializeField] float sensibilidad;
    private float rotacionX;
    private float rotacionY;
    private void Awake() {
    Cursor.lockState = CursorLockMode.Locked;
    }
    private void Update() {
    MovimientoHorizontal();
    MovimientoVertical();
    }
    private void MovimientoHorizontal() {
    float mouseX = Input.GetAxis("Mouse X") * Time.deltaTime * sensibilidad;
    rotacionX += mouseX;
    transform.rotation = Quaternion.Euler(0, rotacionX, 0);
    }
    private void MovimientoVertical() {
    float mouseY = Input.GetAxis("Mouse Y") * Time.deltaTime * sensibilidad;
    rotacionY -= mouseY;
    rotacionY = Mathf.Clamp(rotacionY, -90, 90);
    Camera.main.transform.rotation = Quaternion.Euler(rotacionY, rotacionX, 0);
    }

    • @ch2754
      @ch2754 ปีที่แล้ว

      No tuve que calcular nada

  • @kait339
    @kait339 2 ปีที่แล้ว

    me puedes pasar el script

    • @podeischupadmelapolla777
      @podeischupadmelapolla777 2 ปีที่แล้ว +4

      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      public class (Aca el nombre del Script que creaste) : MonoBehaviour
      {
      private new Transform camera;
      public Vector2 sensibility;
      // Start is called before the first frame update
      void Start()
      {
      camera = transform.Find("Nombre de tu camara");
      Cursor.lockState = CursorLockMode.Locked;
      }
      // Update is called once per frame
      void Update()
      {
      float hor = Input.GetAxis("Mouse X");
      float ver = Input.GetAxis("Mouse Y");
      if (hor != 0) {
      transform.Rotate(Vector3.up * hor * sensibility.x);
      }
      if (ver != 0) {
      //camera.Rotate(Vector3.left * ver * sensibility.y);
      float angle = (camera.localEulerAngles.x - ver * sensibility.y + 360) % 360;
      if (angle > 180) { angle -= 360; }
      angle = Mathf.Clamp(angle, -60, 60);
      camera.localEulerAngles = Vector3.right * angle;
      }
      }
      }

    • @CodeXpert-c6d
      @CodeXpert-c6d 18 วันที่ผ่านมา

      @@podeischupadmelapolla777 gracias a esta gente el mundo es un lugar mejor