Eu sempre quis que o meu computador fosse tão fácil de usar como o meu telefone, o meu desejo foi realizado pois eu já não consigo descobrir como usar o meu telefone.

Tutorial – Jogo em 1º Pessoa em Unity 3D – Parte 1

Olá, neste tutorial vamos criar um jogo em 1º Pessoa como o do video abaixo:

Vamos lá!

  • Crie um novo projeto e selecione todas as opções disponíveis.

  • Crie um novo terreno para seu jogo, vá em Terrain/Create Terrain, modele-o da forma que você quiser, caso você tenha dificuldades dê uma olhada no video abaixo.
  • Posicione a Main Camera para que ela fique no meio do terreno ou no local que vc deseja que o jogador inicie.
  • Crie um Directional ligth ( GameObject/Create Other/Directional Ligth) e rotacione (tecla de atalho E ) até que ele ilumine o terreno.
  • Crie um GameObject vazio ( GameObject/Crate Empty) e posicione ele no mesmo local da Main Camera, para isto use os campos Transform/Position da aba Inspector.
  • Renomeie (F2 e ENTER para confirmar) o objeto para Jogador.
  • Na Janela Hierarchy arraste a Main Camera para dentro do Objeto Jogador, isto fara com que  a camera seja objeto filho do jogador.
  • Crie um Cubo (GameObject/Create Other/Cube) e arraste para dentro do jogador, zere todos os valores do Position para que o cubo esteja exatamente na mesma posição do jogador.
  • Na janela Hierarchy selecione o jogador e adicione o componente RigidBody nele(Component/Phisics/RigisBody).
  • Na janela Inspector selecione o campo Frezze rotation
  • Vamos agora ao primeiro arquivo de programação, crie um novo javascript(Asset/Create/JavaScript), renomeio com o nome de mov_personagem e de um duplo clique para editar ele.
  • Copie e cole o seguinte código nele.
  • //Velocidade do Personagem
    var vel = 10.0;
    //Lados
    private var lado:float = 0;
    private var ladoV:float = 0;
    function Update () {
    	//Vira a posição conforme o mouse
    	lado+= (Time.deltaTime * vel * Input.GetAxis("Mouse X") * 5);
    	ladoV-= (Time.deltaTime * vel * Input.GetAxis("Mouse Y") * 5);
    	transform.eulerAngles = Vector3(ladoV, lado, 0);
    	//Anda sempre para frente e para o lado
    	transform.Translate(Vector3.forward * ((Time.deltaTime *vel) * Input.GetAxis("Vertical")));
    	transform.Translate(Vector3.right * ((Time.deltaTime *vel) * Input.GetAxis("Horizontal")));
    
    }
    
  • Salve o Scipt e volte para o Unity.
  • Arraste o script para o Jogador.
  • Teste e veja que apertando as teclas de seta e usando Mouse já é possível movimentar o personagem.

56 Respostas

  1. me diz uma coisa.
    porque que quando eu atiro a bala não sai e o personagem é arremeçado para trás?

    27/07/2011 às 0:30

    • Olá, sua bala está colidindo com o personagem quando vc atira, tente mudar a posição inicial da bala para que ela não colida nem com o personagem e nem com a arma.

      27/07/2011 às 11:21

    • Guilherme

      Por que a arma ta com colisao em relação a bala

      19/03/2015 às 16:32

  2. marcos

    vc é 10 continue acim vc eo tipo de cara 10 sou seu fan agora esse site ja ta gravado

    13/08/2011 às 4:47

  3. denilsomitamar

    muito bom o tutorial, parabéns !!!

    13/08/2011 às 13:43

  4. Washington

    Aff n to quentando mais isso faço aki tudo serto mais na hora de testar fica caindo do cenario o meu personagem Aff.. Me ajuuda ae. E o Tuto.. e muito bom Vlw 😀

    17/08/2011 às 17:03

    • Washington, clique no personagem, veja na janela Inspector o position Y, depois faça a mesma coisa clicando no Terreno, a posição Y do personagem deve ser maior do que a do Terreno.
      Outro problema pode ser que seu personagem não tem nenhum componente de colisão, adicione no seu personagem um CubeCollision.

      18/08/2011 às 11:21

      • thiago

        cara o meu tbm ta dando isso e mais uma coisa como q acd um CubeCollision (meu 1° dia no unity) me ajd pf

        28/05/2012 às 2:21

  5. Amigo ,Na hora de criar um javascript eu colo os codigos que voce coloco no site ,mais aki na hora pra colocar o JAVASCRIPT no personagem da um erro assim: “expected, Insert a semicolon at the end” , Nao sera que devo alterar os codigos na hora de criar o javasript? Apagar tudo que tem la dentro depois colocar? Pior que ja fiz isso e persiste o erro ajuda por favor agradeço desde ja a atençao abraço

    22/08/2011 às 21:02

    • Lucas

      Tem que colocar um ponto-e-vírgula (;) no final do script.

      04/08/2013 às 15:48

  6. Eu consegui colocar o JAVASRIP no personagem desse modo aki ,mais quando do play fica todo desordenado,os comando ficam fora de ordem ficam malucos colocquei assim o javasript:

    //Velocidade do Personagem
    var vel = 10.0;
    //Lados
    private var lado:float = 0;
    private var ladoV:float = 0;
    function Update () {
    //Vira a posição conforme o mouse
    lado+= (Time.deltaTime * vel * Input.GetAxis(“Mouse X”) * 5);
    ladoV-= (Time.deltaTime * vel * Input.GetAxis(“Mouse Y”) * 5);
    transform.eulerAngles = Vector3(ladoV, lado, 0);
    //Anda sempre para frente e para o lado
    transform.Translate(Vector3.forward * ((Time.deltaTime *vel) * Input.GetAxis(“Vertical”)));
    transform.Translate(Vector3.right * ((Time.deltaTime *vel) * Input.GetAxis(“Horizontal”)));
    }

    Me ajuda por favor ,agradeço desde ja

    22/08/2011 às 21:20

  7. Ja tentei de varias formas e ainda persiste o erro

    22/08/2011 às 21:27

    • Os comandos estão funcionando mas de forma errada?Você mudou alguma configuração na propriedade do Input?
      Tente dar mais detalhes para que eu possa te ajudar.

      23/08/2011 às 11:26

      • Matheus ¬¬

        Cara , o meu também tá assim, ajuda por favorrr!!!!!!! vo dexa meu msn:

        theus98@live.com, por favor me adiciona e me ajuda! não aguento mais esse erro!

        12/01/2012 às 21:38

  8. Nao mudei nenhuma configuraçao do Input,Tipo coloco o personagem pra andar e a imgaem treme,quando vou virar pra os lados vira so um poco de lado ,ele so se movimenta se eu pular e sair do cubo , omeu é o Unity 3.3 ,Isso muda alguma coisa?No meu tem esse Freeze rotation ,mas dessa forma la tem essa opsao mais com varias opsoes para marcar ” x ( ) z( )” ,tbm tentei colocar a arma e nem temo como pegala e ela nem atira ,atiro uma vez so e ae desapareceu (MAIS ESSA VEZ ELA”ARMA ERA UM CUBO”)
    Oque devo fazer?Agradeço desde ja

    23/08/2011 às 17:39

  9. Olá, você usa a versão 3.4 então, neste caso voc~e precisa marcar as propriedades x,y e z do Frezze Rotation.

    24/08/2011 às 11:19

    • Matheus ¬¬

      o meu é essa versão! e dá o seguinte erro:

      expected, Insert a semicolon at the end

      Me ajuda por favor!

      12/01/2012 às 22:15

  10. Vitor

    onde eu acho o cubcollider

    07/10/2011 às 0:58

    • Olá, é BoxCollider, fica no menu Components/Physics

      14/10/2011 às 11:11

  11. vncus

    se eu baixar um senario do google sketchup para colocar como mapa vai dar certo

    09/10/2011 às 1:11

    • vncus

      sim

      10/10/2011 às 23:05

    • Vai sim, se foi modelado por completo vai dar certo sem problemas.

      14/10/2011 às 11:12

  12. vncus

    minha camera sai do lugar quando clico start

    09/10/2011 às 2:16

    • De uma olhada se o personagem onde ela esta alocada não esta colidindo com o chão(entrando no chão)..

      14/10/2011 às 11:14

  13. Higor M. Quinto

    Olá,
    Eu segui certinho, tudo oquê você falou, e quando vou testar, o meu personagem, passa pelo chão e fica caindo º-º

    29/10/2011 às 19:50

  14. Ai tu e o maior cara continua apoio total meu

    15/11/2011 às 22:49

  15. O meu também higor

    16/11/2011 às 12:08

  16. Matheus ¬¬

    eaereis, to desesperado! quando eu crio o JavaScript,coloco direitinho o código, mais da esse erro:

    expected, Insert a semicolon at the end

    Por favor ME AJUDE!!!
    EU TO DESESPERADO!

    11/01/2012 às 23:09

  17. Matheus ¬¬

    eaereis, to desesperado! quando eu crio o JavaScript,coloco direitinho o código, mais da esse erro:

    expected, Insert a semicolon at the end

    Por favor ME AJUDE!!!
    EU TO DESESPERADO!

    Me Ajudaaaaaa!!!1

    12/01/2012 às 21:41

  18. Nota 10 pro Site e os Tutoriais

    14/01/2012 às 2:51

  19. Matheus :)

    Emerson, olha só o jogo que eu criei! MT OBRIGADO PELOS TUTO!

    file:///C:/Users/Familia/Desktop/WebPlayer/TaticalArmsModernWeaponsBETA.html

    14/01/2012 às 22:14

  20. Marcio

    cara eu segui corretamente o que vc falou mas nao consegui colocar o script. minha versao e a 3.4

    01/02/2012 às 18:10

  21. Sim

    No meu o cara entra dentro do chão kkkkkkkkkkkkkkk

    03/02/2012 às 19:32

  22. marckk3

    eu nao usei a bala na cena porque a arma tava pegando fogo !!!
    entao eu arranquei a bala e coloquei o meu prefab no cubo … e deu ce rto nada ficou colidindo com nada!

    01/03/2012 às 13:45

  23. ei
    o meu carinha cai como fosse uma abismo,como nao tivesse nada,alguem ai pode me ajudar…

    14/03/2012 às 22:24

    • Francis

      Pesquisei por aqui e achei a solução , você precisa selecionar o terreno e desabilitar o
      its Triggers, que fica em Inspector

      24/03/2012 às 20:32

      • Francis

        nota: A disposiçao do personagem deve ser em cima do terreno, sou leigo no assunto , mas comigo funcionou assim

        24/03/2012 às 21:09

  24. Francis

    No meu caso o personagem tambem cai como se fosse um abismo atravessando o terreno . ficarei grato se alguem puder me ajudar, obrigado pelo espaço e atençao , deixo meu email aqui para contato caso alguem saiba como ajudar , espectador@terra.com.br. Desde ja obrigado

    24/03/2012 às 20:25

  25. matheus

    quem ta com erro no javascript e pq ta com os numeros da tabela de linha dos codigo bota esse do movimento:

    //Velocidade do Personagem
    var vel = 10.0;
    //Lados
    private var lado:float = 0;
    private var ladoV:float = 0;
    function Update () {
    //Vira a posição conforme o mouse
    lado+= (Time.deltaTime * vel * Input.GetAxis(“Mouse X”) * 5);
    ladoV-= (Time.deltaTime * vel * Input.GetAxis(“Mouse Y”) * 5);
    transform.eulerAngles = Vector3(ladoV, lado, 0);
    //Anda sempre para frente e para o lado
    transform.Translate(Vector3.forward * ((Time.deltaTime *vel) * Input.GetAxis(“Vertical”)));
    transform.Translate(Vector3.right * ((Time.deltaTime *vel) * Input.GetAxis(“Horizontal”)));

    }

    O Da Arma:

    //Velocidade do tiro

    var velTiro = 150.0;
    //Bala
    var balaObj : GameObject;

    function Atira () {
    //Cria a bala, adiciona fisica e aplica velocidade
    var bala = Instantiate(balaObj,transform.position,transform.rotation); //GameObject.CreatePrimitive(PrimitiveType.Sphere);
    bala.tag = “bala”;
    //bala.transform.parent = transform;
    bala.AddComponent(Rigidbody);
    bala.transform.position = transform.position;
    bala.transform.rotation= transform.rotation;
    //bala.transform.localScale= Vector3(0.1,0.1,0.1);
    bala.rigidbody.velocity = transform.forward * velTiro*-1;
    bala.rigidbody.mass = 1;
    //toca o som do tiro
    audio.Play();
    }

    function Update () {
    //Atira quando aperta o botão correspondente
    if (Input.GetButtonDown(“Fire1”)) {
    Atira();
    }
    }

    O Mata Bala:

    function Start () {
    meMate();
    }

    function meMate(){
    //Mata a bala depois de 5 segundos que ela foi criada
    yield WaitForSeconds(5);
    Destroy(gameObject);

    }

    O Inimigo:

    //personagem
    var personagem : Transform;
    //Velocidade do tiro
    var velTiro = 150.0;
    //Obj bala
    var balaObj : GameObject;
    //Var para resetar
    private var posIni:Vector3;
    function Start(){
    //Pega posição para resetar
    posIni = transform.position;
    mudaLado();
    Auto();
    }

    function reseta(){
    transform.position = posIni;
    }
    //Se levou um tiro morre
    function OnCollisionEnter (collision : Collision)
    {
    //Se levou um tiro morre
    if(collision.gameObject.tag == “bala”){
    Destroy(gameObject);
    }
    }

    function FixedUpdate ()
    {
    //Se estiver longe do personagem anda
    var pos = transform.position – personagem.position;
    //print(pos.magnitude);
    if(pos.magnitude > 200)
    transform.Translate(Vector3.forward * Time.deltaTime * 15);
    //Longe do cenario reseta
    if(transform.position.x > 1800 || transform.position.x 1800 || transform.position.z < 200){
    reseta();
    }

    }

    function mudaLado(){
    while(active){
    //Sorteia um novo lado para andar
    var ladoSorteado = Random.Range(-180,180);
    transform.eulerAngles = Vector3(0, ladoSorteado, 0);
    yield WaitForSeconds(8);
    }

    }
    function Auto(){
    //Verifica se esta proximo ao jogador, caso sim ele vira para ele e atira
    while(active){
    var pos = transform.position – personagem.position;
    //print(pos.magnitude);
    if(pos.magnitude < 200){

    transform.LookAt(personagem);
    Atira();
    }

    yield WaitForSeconds(Random.Range(0,3));
    }
    }

    function Atira () {
    //Função que atira no personagem
    var bala = Instantiate(balaObj,transform.position,transform.rotation); //GameObject.CreatePrimitive(PrimitiveType.Sphere);
    bala.tag = "balaIni";
    bala.AddComponent(Rigidbody);
    bala.rigidbody.velocity = (transform.forward * velTiro);
    bala.rigidbody.mass = 1;
    }

    Eu Tirei os Numeros de Tabela 😀

    OBS: Quem N Intendeu oq e NUMERO de TABELA DOS CODIGOS so cola o codigo no lugar do q esta no tutorial

    06/04/2012 às 15:24

  26. cara como eu faço para arma não atravessar o chão ?

    02/06/2012 às 0:22

  27. leonardo

    cara ele funciona com os comando c++ ou so java script

    16/06/2012 às 19:32

  28. Carlos Eduardo Da Silva

    Eu não consigo arrastar o Js(java script) para pasta Jogador…Alguem me ajuda?????????

    04/09/2012 às 20:50

  29. Soberano

    ei cara sou seu fan, mas to tendo um problema, meu personagem quando vou testar ele cai do cenario, ja fiz esse box colisao mas nao deu certo poderia me ajudar

    04/11/2012 às 23:31

  30. This is a topic that is close to my heart… Take
    care! Where are your contact details though?

    14/11/2012 às 0:33

  31. vitinhotq

    pq quando eu atiro so forma clone da bala me explica ai pf

    27/12/2012 às 15:35

  32. Muito bom o tuto. Estou aproveitando os exemplos e criando uma plataforma online com material de estudo para alunos em 3D, com login e senha.

    Uma dúvida: Como faço pra exportar um arquivo do Google Sketchup para o Unity como terreno? Já vi vários tutoriais e consigo fazer a parte gráfica, embora não haja colisão!

    Valeu pela ajuda!

    19/06/2013 às 18:12

  33. olá, como eu faço pra criar o personagem?

    19/09/2013 às 10:41

  34. Pedro

    PESSSSSSSSSSOALLLLLLLLLLLL ME AJUDAA !!!!! PQ QUANDO EU CRIO O SCRIPT N CONSIGO ENTRAR NELE, DA ERRO…!!! NAO ABRE O JAVASCRIPT !!!! AJUDA AE !!! POR FAVOR !! SOU SEU FA ! ADOREI O TUTO MAS ME AJUDA AE !!!

    22/03/2014 às 14:15

    • caio

      qual seu email?

      20/05/2014 às 14:50

  35. Pedro

    acabei de olhar aki e vi q n da pra abrir nenhum java sccript !! pq issso gente.. ajuda ae

    22/03/2014 às 14:19

  36. jose reis

    ola
    quando arrasto o meu terreno os obejectos não se movem em conjunto com o terreno.
    podem me ajudar???

    17/05/2014 às 8:30

  37. kevin

    não era so colocar um first person controler?

    08/11/2014 às 12:45

  38. jonathan

    No meu aparece : all compiler errors have to be fixed before you can enter playmode!.
    Oque eu faso? Por favor me ajude!!
    Meu PC ta sem net eu vi esse site pelo cel…
    E esctevi tudo a “mao”! Quem puder me ajudar eu agradeço. (Whatsapp 21985765804).

    12/12/2014 às 15:38

  39. fabrico

    meu personagem fica caindo do mapa

    19/02/2015 às 20:12

  40. Ok eu fiz tudo certo mais e como eu modelo meu personagem?

    30/03/2016 às 22:51

  41. o meu personagem ta atravessando a terra.
    me ajuda?

    19/06/2018 às 18:59

Deixar mensagem para Washington Cancelar resposta