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.
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
Por que a arma ta com colisao em relação a bala
19/03/2015 às 16:32
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
muito bom o tutorial, parabéns !!!
13/08/2011 às 13:43
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
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
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
Tem que colocar um ponto-e-vírgula (;) no final do script.
04/08/2013 às 15:48
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
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
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
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
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
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
onde eu acho o cubcollider
07/10/2011 às 0:58
Olá, é BoxCollider, fica no menu Components/Physics
14/10/2011 às 11:11
se eu baixar um senario do google sketchup para colocar como mapa vai dar certo
09/10/2011 às 1:11
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
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
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
Ai tu e o maior cara continua apoio total meu
15/11/2011 às 22:49
O meu também higor
16/11/2011 às 12:08
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
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
Nota 10 pro Site e os Tutoriais
14/01/2012 às 2:51
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
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
No meu o cara entra dentro do chão kkkkkkkkkkkkkkk
03/02/2012 às 19:32
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
ei
o meu carinha cai como fosse uma abismo,como nao tivesse nada,alguem ai pode me ajudar…
14/03/2012 às 22:24
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
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
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
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
cara como eu faço para arma não atravessar o chão ?
02/06/2012 às 0:22
cara ele funciona com os comando c++ ou so java script
16/06/2012 às 19:32
Eu não consigo arrastar o Js(java script) para pasta Jogador…Alguem me ajuda?????????
04/09/2012 às 20:50
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
This is a topic that is close to my heart… Take
care! Where are your contact details though?
14/11/2012 às 0:33
pq quando eu atiro so forma clone da bala me explica ai pf
27/12/2012 às 15:35
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
olá, como eu faço pra criar o personagem?
19/09/2013 às 10:41
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
qual seu email?
20/05/2014 às 14:50
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
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
não era so colocar um first person controler?
08/11/2014 às 12:45
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
meu personagem fica caindo do mapa
19/02/2015 às 20:12
Ok eu fiz tudo certo mais e como eu modelo meu personagem?
30/03/2016 às 22:51
o meu personagem ta atravessando a terra.
me ajuda?
19/06/2018 às 18:59