Criando jogo MMORPG – Parte 1
Estarei mostrando neste tutorial como criar um jogo do estilo MMORPG, estaremos abordando vários tópicos, entre eles o movimento, interação e rede online.
Estarei mostrando os fundamentos, não é o alvo de este curso montar um jogo e sim ensinar os princípios, dai para frente você usa sua criatividade.
Usaremos o Unity 3D para fazer os jogos, não modelaremos nada(não é minha área), usaremos modelos prontos achados na net.
Vamos começar!
Primeiramente você deve baixar e instalar o Unity procure o instalador no site www.unity3d.com, baixe e instale, pode ser a versão free.
O terreno.
Para criar um terreno no Unity é simples, quando você abrir o Unity pela primera vez ele vai dar a opção para vc criar um projeto novo como a imagem abaixo mostra.
Selecione todos os packages, menos os que são (mobile), estes servem para criar jogos para dispositivos moveis, depois clique em create.
Agora com o projeto criado vá em Terrain/Create Terrain
Adicione uma LUZ, vá em GameObject/Create Other/Directional Ligth
Selecione Directional Light na Janela Hierarchy (caso queira renomear, clique F2 e ENTER para comfirmar) e depois escolha a ferramenta Rotate (atalho:tecla E)
Gire o eixo X(vermelho) até que o terreno seja iluminado, observe que enquanto vc vai mudando o eixo os valores de Rotation na janela Inspector vão mudando, vc pode também mudar diretamente por la.
Vamos colocar uma textura no terreno, selecione ele e na janela Inspetor clique no botão que tem um pincel.
Observando um pouco a imagem acima veja que existem mais botões nesta janela, a primeira da esquerda para direita é para criar montanhas, é fácil, só clicar nela e sair desenhando no terreno, a próxima é para elevar,a outra para suavizar, a de textura que vamos ver agora, depois para adicionar arvores, depois adicionar grama e por último a de configurações,mexa a vontade.
Voltando para a textura, clique em Edit Texture e depois Add Texture, na janela a seguir clique no botão de mira em Splat
Selecione um textura e depois clique em Add.
O terreno será pintado com esta textura, adicione quantas quiser e vá pintando o terreno,para adicionar texturas externas basta pega-la e arrasta-la para a janela Project.
Para adicionar arvores e gramas siga o mesmo processo.
Para adicionar um Céu ao projeto vá em Edit/render Settings, na janela Inspector você verá a opção de colocar um Skybox Material, arraste um para lá, eles estão na janela Project em Standart Assets/Skyboxes
Olha ai minha janela Scene
Você pode mover a câmera do Scene com o teclado ou Mouse usando o botão central , para girar use a combinação alt+botão direito do mouse.
Colocando Personagem na cena.
Agora vamos colocar o personagem na cena, como eu disse não vou modelar, vamos usar um personagem que tirei da net, ele pode ser baixado em meu site clique aqui.
Você vai ver que são 2 arquivos, uma imagem e um arquivo fbx, arraste primeiro a imagem para a pasta Project do Unity e depois o fbx, ele estará disponível para colocarmos na cena, mas antes vamos mapear a animação:
Selecione o CharBase no Project, na janela Inspector dessa até Animations, em Split Animation(que deverá estar marcada) clique no + no canto direito.
Fazendo isto você começara a cortar a animação, deixe tudo como na imagem abaixo:
Não esqueça de clicar em Apply para validar tudo.
Arraste ele da janela Project para a janela scene
Ele ficara pequeno, use a ferramenta de escala (tecla R) para aumentar seu tamanho.
Vamos fazer a câmera seguir ele, selecione Main Camera em Hierarchy , vá em Component/Camera Control e adicione um Smooth Follow , em Inspector selecione o CharBase da Janel hierarchy até Target do componente, veja abaixo.
Agora Salve e de um Play para ver o jogo, observe que a câmera se posiciona suavemente atrás do personagem.
Vamos Programar!!!
Crie um novo arquivo JavaScript, para isto vá em Assets/Creste/javascript, renomeio para anda, de 2 cliques nele para abri-lo no editor, coloque o seguinte código nele e salve.
//****Variaveis**** //Velocidade de movimentaçãp var vel:int; //Componente de animação var Animacao : Animation; //Clipes de animação var clipes:AnimationClip[]; //Guarda se ja foi clicado private var clicado:boolean = false; private var seta : GameObject; function Start(){ seta=GameObject.CreatePrimitive(PrimitiveType.Cube); seta.transform.position = Vector3(0, 0, 0); //seta.addComponent(Rigidbody); } //Função UPDATE function Update() { //if(!seta)return; //se clicou com botão direito do mouse if(Input.GetKeyDown(KeyCode.Mouse0)) { //Cria um plano com a posição do personagem var playerPlane = new Plane(Vector3.up, transform.position); //Desenha um ponto entre o personagem e o local clicado var ray = Camera.main.ScreenPointToRay (Input.mousePosition); var hitdist = 0.0; //Seta que foi clicado clicado = true; //Verifica se pode se mover e traça o caminho if (playerPlane.Raycast (ray, hitdist)) { //Pega pos clicada var targetPoint = ray.GetPoint(hitdist); //pega a rotação targetPosition = ray.GetPoint(hitdist); var targetRotation = Quaternion.LookRotation(targetPoint - transform.position); //seta.rigidbody.velocity = Vector3.zero; seta.transform.position = Vector3(targetPosition.x,targetPosition.y,targetPosition.z ); //Ajusta rotação do personagem transform.rotation = targetRotation; } } //Caso o personagem não esteja no ponto clicado ele anda até lá //print((transform.position - seta.position).magnitude); if((transform.position - seta.transform.position).magnitude > 2){ transform.Translate(Vector3.forward * ( Time.deltaTime * vel)); //seta animação dele andando Animacao.clip = clipes[1]; Animacao.Play(); }else{ //seta animação dele parado Animacao.clip = clipes[0]; Animacao.Play(); } }
Agora volte para o Unity e arraste este script para o personagem.
Vamos carregar as variáveis, na variável vel coloque 5, arraste o charBase até o campo Animacao, em Clipes clique na seta e digite 2(de enter) para criar 2 nós de clipes, clique na mira e selecione os clipes parado e anda respectivamente, tudo tem que ficar como a imagem abaixo:
De um Play e teste, perceba que quando você clica é criado um cubo e o personagem vai até este cubo.
Aqui acaba a primeira parte.
Muito bom cara, tem algum material detalhado pra me indicar?
14/08/2011 às 2:53
Aconselho a estudar o próprio material que vem com Unity, é muito bom e completo, basta dar um F1 com o Unity aberto.
16/08/2011 às 12:59
Grande Emerson!
15/08/2011 às 3:09
Perfeito Emerson por que vc n ficou mais ON no Msn?
15/08/2011 às 13:02
Olá, desculpa cara, meu filho está duente e não estou podendo ficar on, logo volto.
16/08/2011 às 13:00
ata tudo bem se e filho tem que cuidar mesmo sempre na frente de tudo ^^
mas quando vc voltar me da um toque preciso falar com vc
Melhoras para o seu filho ^^
17/08/2011 às 13:47
Ola Emerson Presiso De Sua Ajuda Tive Um Probleminha Na Hora De Por O Script Eu Pois Td E TalzSo Que Meu Personagem nao para de andar nao aparece aquele cubo e na hora que eu clico com o botao esquerdo nao aconteçe nada ele nao para de andar pra frente sera que vc podia me ajudar por favor Passa seu msn gostaria de ficar seu amigo
e melhoras pra seu filho tbm
Meu Msn ; luigibm2010@hotmail.com
Deus Te Abençoe
24/08/2011 às 2:30
Olá, ele não para de andar porque não encontra o cubo que é o destino dele, verifique por favor se seguiu todos os passos, veja o vídeo que fiz para ter uma noção maior.
24/08/2011 às 11:23
Ermeson Obrigado Pela Resposta Mais Ja Assisti o video umas 3 veses e nao achei problema ainda
estou com o mesmo problema sera que podia me ajduar que houver tempo
Muito Obrigado
24/08/2011 às 21:53
e ai conssegui numa boa mais tipo queria saber como coloco uma camera isometrica nesse game pode me add queria saber onde consseguir mais modelos e como configurar o pulo e socos parece que vc nao encinou obrigado aguardo resposta devill@66hotmail.com
26/08/2011 às 2:47
Olá, o tutorial ainda não esta pronto, vou adicionar estes comandos sim, infelizmente não posso add porque não dou conta, desculpe.
26/08/2011 às 14:47
desculpa floda mais vc sabe onde posso achar mais modelos igual a esse seu?
26/08/2011 às 6:55
É difícil encontrar , este eu modifiquei no Blender e exportei para fbx, quando preciso temos um pessoal de artes que modela, para fazer jogos tem que ter gente especializada em várias coisas.
26/08/2011 às 14:49
vlw to estudando blender vamo ve no que da
26/08/2011 às 20:24
Ermeson Obrigado Pela Resposta Mais Ja Assisti o video umas 3 veses e nao achei problema ainda
estou com o mesmo problema sera que podia me ajduar que houver tempo
Muito Obrigado
26/08/2011 às 21:21
ola achei um site com modelos que quise http://www.blendswap.com
se eu abri no blender e exportar pra bfx da serto de funciona com aquele codigo java que vc passo?aguardo resposta
27/08/2011 às 3:01
Da sim, sem problemas, a unica diferença é que vc tem q cortar as animações cok relação a animação criada no seu personagem
27/08/2011 às 18:12
vc poderia fazer uma vidio aula de como adptar os modelos baixados para unity e passar alguns scripts isso ia ajuda muita gente ou encina a cortar as animaçoens ja ta blz brigadao cara ando estudando muito sobre blender e unity mais nao tenho consseguido muito resultado se me permite passar alguns tutoriais que achei http://www.dmu.com/
01/09/2011 às 20:17
Blz, vou fazer um ensinando a adaptar do Armazem 3d para unity.Conheço os tutorias do site, recomendo!
02/09/2011 às 12:41
to ancioso quando sobra um tempinho pra vc fazer o tuto? to querendo fazer um rpg parecido com lineage 2 mais movimentando o perssonagem pelo w,s,d,a se der passa esse scrit tambem abrax vc e o cara ^^
03/09/2011 às 19:48
Alguem ai me ajuda , quando eu vo abrir o javascript que crieie ele fala assim que o aplicativo nao foi iniciado corretamente (0xc0000135).clique em “ok” para finalizar a execução.
Por favor algum me ajuda tenho ja tudo pronto so meu boneco que nao mexe porque nao poso colocar o codigo no javascript 😡 !
09/09/2011 às 23:21
Estranho, tente reinstalar ou modificar o editor nas configurações.
12/09/2011 às 11:11
aconteceu o msm comigo, eu fiz de tudo nao consegui arrumar.
eu desinstalei e intalei tudo denovo msm assim n consegui.
pode ser que de fazendo isso:
1-entra no unity
2-va em edit
3-va em preferences
4-muda tira o built editor clicando em browser
5-vai aparecer uma coisa para vc pesquisar vc vai na seu pasta de unity depois monodevelop
e clica em monodevelop
6- teste.
espero ter ajudado
16/10/2011 às 0:01
Olá Emerson, parabéns pelo tutorial, bastante elucidativo. Vou tentar seguir o segundo tutorial. Obrigado!
19/09/2011 às 15:52
Olá Emerson, ótimo tutorial, porém no final quando vou testar ele não caminha, ele anda de um lugar para o outro, mas sem animação, sempre com os braços esticados como na posição inicial.
Se poder me ajudar, lhe agradeço imensamente e PARABÉNS pelo ótimo trabalho.
21/09/2011 às 0:11
eae emerson
fazendo o seu tuto mas no personagem da um problema
no defalt tak nao aparece o msm menu q o seu e sim um q nao da pra muda nada
http://imageshack.us/photo/my-images/7/semttuloxkg.jpg/
23/09/2011 às 4:20
cara parabéns ficou muito bom!
aqui funcionou tudo certo
programo em .NET C# a uns 2 anos e sempre gostei de games, mas não pensei que era simples começar…
vlw!
20/10/2011 às 13:11
Emerson eu Queria tirar este cubo e Substituir por um Seta que eu tenho que é em 3Ds Como eu Faço quando vc me responder manda a resposta para : jailson001234@ig.com.br por que estol querendo criar um jogo mmorpg mais de ves um Cubo uma Seta que quando da um clique no Cham ela fica apontada para baixo ai o personagem vai até onde eu dei o clique, me entende
23/10/2011 às 23:04
eu n to conseguindo colocar o script, tá dando os seguintes erros:
Assets/NewBehaviourScript.js(43,1): BCE0044: expecting :, found ‘043’.
Assets/NewBehaviourScript.js(41,4): UCE0001: ‘;’ expected. Insert a semicolon at the end.
eu n sei mais o que fazer, n sei se o problema é no unity, ou no programa que ela usa para abrir o script… tentei de tudo que pude, eu uso o unity 3.3, o problema n é só nesse script, é em tdos( tentei os scripts daquele tutorial do jogo em 1ª pessoa e deu o msm erro)
se puder me ajudar agradecerei mto
acho seu trabalho mto bom, muito bem explicado
28/10/2011 às 23:15
Cara a janela do meu não está igual a sua,
como eu faço pra ficar igual a sua janela?T_T*
aguardo resposta !!!! endereço do email>>>>jeferson_260_@hotmail.com.!!
agradeço pelo video aulas tá de boa cara!!!*-*
29/10/2011 às 22:26
Boa noite emerson quando eu vo abrir o javascript que crieie ele fala assim que o aplicativo nao foi iniciado corretamente (0xc0000135).clique em “ok” para finalizar a execução. eu já fui no preferences e nada resolvi ,tenho eu de baixar de novo por esse unity que eu baixei é a nova versão, alguma idéia? aceito sugestões!!!
05/11/2011 às 2:16
muito bom seus tutoriais vlw ta ajudano muito^^
07/11/2011 às 21:20
Meu Unity não veio com o script Smooth Follow, você poderia me falar como adicionar ele?
11/11/2011 às 18:29
emerson vc poderia me passar um outro program que nele eu possa,criar armaduras em geral e armas para os personagens?
hà me add no msn também assim vai ser melhor para vc me ajudar
16/11/2011 às 19:28
Ola , eu to tendo problemas para recorta meu personagem …
Será que é porque o meu plano Unity é free e nao por 30 dias
E eu quero saber tambem se esse tipo de jogo é igual mu que tem tipo um bar
ferreiro cidades esses negocio se alguem poder responder adiciona no msn por favor …
alysonpalmeiras@hotmail.com
08/12/2011 às 19:29
quando ele corre meu personagem fica na posiçao de corre com uma perna levantada ele meche normal mais a animação de corre nao funçiona direito espero uma ajuda
07/01/2012 às 4:56
esqueçi um detalhe no meu antigo comentario ele anda sozinho quando eu do play
07/01/2012 às 5:09
Me ajudem ai, nao consigo Colar o Script do lado direito, não aparece aquelas opçoes de clip, animaçao etc..
me ajuda ai.. pls
19/01/2012 às 1:55
MEU PERSONAGEM NAO ANDA ATE O MOUSE, ELE SOH ANDA PRA FRENTE E N VIRA
ESSA MERDA –‘
qq eu devo fazer?
19/01/2012 às 16:31
ou aonde vc acho esse programa para baixa o unity 3d eu to procurando aqui mais não acho me ajuda
22/01/2012 às 3:46
daonde ce tirou esse clipes
25/01/2012 às 16:53
mas como fazer um personagen????
31/01/2012 às 22:14
Muito bom seu tuto… estou querendo criar um jogo de era medieval ( estilo o livro Rangers: A Ordem Dos Arqueiros) caso alguem queira ajudar… Email: matheus_-.-_@hotmail.com
02/02/2012 às 17:04
Koe manin , eu to desde ontem procurando coisa assim … , eu num sabia criar um personagem no blender , eu procurei na net Personagem para o Unity , mas num achei , ai me deu vontade de ver seu video ( dei joinha e sou mais 1 escrito no seu canal ) , eu aprendi só até agora como por personagem e fazer a camera seguir ( aprendi usa JavaScript ) , mas eu to com um probleminha aqui no seu blog ta diferente do youtube !
aquie você não ensinou a animação , olha o meu personagem ja ta andando mas ele não se meche , ele fica com os braços levantados e com as pernas juntas … quando ele passa por morrinhos ele entra de baixo da terra e cotinua indo … tipo agora tu ta se perguntando , por que você ( eu ) não seguiu os passos como o video ?
é por que eu clicko em meu ‘personagem’ (‘personagem’ = char) (em Hierarchy) ai click em Default Take ( em Insperctor ) , ai clicko em Default Take ( em Project ) , mas em Inspector não abre oque deveria abrir na como na sua video aula ‘-‘
aparecer assim :
Inspector
↓ Defalt Take (Animation C
Compressed [ ]
Sample Rate 25
Wrap Mode Defalt
↓ Bounds
↓ Center
X 0
Y 0
Z 0
↓ Extent
X 0
Y 0
Z 0
————————————- Me ajudaaaaaaaaaaaaaaaaaaaaaaa ————————
02/02/2012 às 23:01
quando copio o codigo ta tudo serto vo em save ai aparece que deu erro vou ver dou play e aparece que deu erro porque olha o que aparece quando vou ver se ta tudo certo: Assets/NewBehaviourScript.js(111,10): BCE0089: Type ‘NewBehaviourScript’ already has a definition for ‘Update()’. ai da erro pq? meu email adson102011@hotmail.com
15/02/2012 às 21:03
Cara muito legal seu video seria legal vc ensinar a mexer com controles tipo atake,voo e tudo mais
15/02/2012 às 23:15
Aew kra.. muito legal o tutorial, gostei bastante, mas rolou uma parada aqui …
o personagem passa por dentro das montanhas, como resolvo esse problema??
23/03/2012 às 13:55
invez de usar o script q o personagem vai onde vc clicka (n consegui arrastar pro projeto) eu usei o third person control q seria o msm so q com os controles wasd e setas ( e ja vem com um personagem feito pela unity)
14/04/2012 às 16:35
Primeiramente meus Parabéns pela iniciativa, você manda muito bem, mais aproveitando este post já assisti seus tutoriais sobre a Engine Unity 3D e uso muito como parte do meu estudo direcionado, então pintou uma dúvida… no 1º Tutorial ( como criar um Mmorpg ), fiz toda a parte, adicionei o personagem, copiei o Script e tudo… mais gostaria de refinar os movimentos do personagem, como pular, atacar, pegar itens… estas coisas, você pretende criar algum tutorial sobre isso, um grande abraço – Adriano Spies – Character Design/Level Design
16/04/2012 às 13:13
Manow, tem como você explicar como o objeto é criado acima do terreno? obrigado.
29/04/2012 às 17:52
você acha que o unity é bom para modelar armas, personagens e tal?
30/04/2012 às 23:31
O unity não é modelador!
01/05/2012 às 1:51
qual seria um bom modelador ?
02/05/2012 às 21:00
O Blender ou 3D Studio Max seriam muito bons de fazer isso, porém não é muito facil de usar, mas é procurar video aulas.
27/05/2012 às 14:21
tem como fazer jogo de luta em mmorpg?
27/05/2012 às 14:22
cara ja criei meu jogo vc poderia ensinar como criar um site pra as pessoas si cadastrar nele para que quando eles si cadastra no site si cadastrar no jogo vc ensinar como faser iso pf obrigado
02/06/2012 às 14:53
pow manow to estudando pra caramba que bom que vc ja crio o seu
vc poderia me add para trocarmos experiencias eu manja um poco de sites e banco de dados
02/06/2012 às 18:21
poww…. passa ai o seu msn
e facebook
02/06/2012 às 19:45
meu msn cara para tu fala com fas iso no site do jogo é lucasfarias_net@hotmail.com ta ai devil
04/06/2012 às 2:05
Oi! queria falar que quando baixei o personagem ele não tá em arquivo fbx, e sim em rar o que faço cara????
14/07/2012 às 0:04
Manow, se vc não sabe que extrair um .rar você não deveria esta criando jogos!
(extrai com winrar ou 7-zip)
14/07/2012 às 22:04
quando coloco play ele só fica em uma posição isso é normal?
19/07/2012 às 18:32
Cara quando eu clico no link do download do personagem da erro diz q a página não existe aé se algum poder me ajudar.
28/07/2012 às 6:21
Arrume o link do download da personagem sff…
04/08/2012 às 12:15
Emerson eu baixei um personagem pelo proprio site da unity e queria saber se tem como vc ensinar a configurar os personagens independentes deles, andar, pular, bater e etc? por favor e urgente
10/09/2012 às 1:36
ermerson , tem como vc fazer um tutorial sobre corrida e IA de carro, obrigado
08/10/2012 às 17:20
arruma o site do download, a gente entra e da erro! estou seguindo tudo o seu tutorial, mas na hora de fazer o download do character, da erro!!!
A R R U M A A E W
15/10/2012 às 14:08
tipo existe algum rpg famoso que foi criado no unyti ?
28/10/2012 às 15:18
emerson eu n consigo achar sua char base pq seu link ta danificado ou temporariamente desligado tem outro site onde eu possa baixar?
04/11/2012 às 17:28
nao consigo fazr o download do personagem
11/11/2012 às 16:49
Emerson, quando eu fui baixar o charbase, não consegui, então resolvi usar um char que veio no unity, o de um construtor, mas na hora quando eu fui salvar o javacript, apareceu um erro que até me impediu de dar play, isso é um problema devido o personagem ou outro aspecto?
15/01/2013 às 20:54
Ei amigo, eu e um amigo temos um site no qual vendemos anti hacker e tivemos pensando em criar um jogo mais até então não encrontramos ninguém que saiba fazer um jogo legal com gráficos realistas, gostaria de criar um jogo MMORPG para gente? e dividiremos os lucros do mesmo.
Skype: Matheus.nascimento92
27/03/2013 às 17:50
Oi emerson, baixei o Unity 3D, e estou tentado criar um MMORPG
Fiz tudo que vc Mando, mais quando cheguei na parte de Programa com o javascipt tive dificuldade
Você falo para abrir Assets/Creste/javascript, renomear para anda,fiz isso. ai abri ele e tinha escrito:
#pragma strict
functin Start () {
}
function Update () {
}
Exclui esse negoço e coloquei o codigo que vc mandou:
//****Variaveis****
//Velocidade de movimentaçãp
var vel:int;
//Componente de animação
var Animacao : Animation;
//Clipes de animação
var clipes:AnimationClip[];
//Guarda se ja foi clicado
private var clicado:boolean = false;
private var seta : GameObject;
function Start(){
seta=GameObject.CreatePrimitive(PrimitiveType.Cube);
seta.transform.position = Vector3(0, 0, 0);
//seta.addComponent(Rigidbody);
}
//Função UPDATE
function Update() {
//if(!seta)return;
//se clicou com botão direito do mouse
if(Input.GetKeyDown(KeyCode.Mouse0))
{
//Cria um plano com a posição do personagem
var playerPlane = new Plane(Vector3.up, transform.position);
//Desenha um ponto entre o personagem e o local clicado
var ray = Camera.main.ScreenPointToRay (Input.mousePosition);
var hitdist = 0.0;
//Seta que foi clicado
clicado = true;
//Verifica se pode se mover e traça o caminho
if (playerPlane.Raycast (ray, hitdist)) {
//Pega pos clicada
var targetPoint = ray.GetPoint(hitdist);
//pega a rotação
targetPosition = ray.GetPoint(hitdist);
var targetRotation = Quaternion.LookRotation(targetPoint – transform.position);
//seta.rigidbody.velocity = Vector3.zero;
seta.transform.position = Vector3(targetPosition.x,targetPosition.y,targetPosition.z );
//Ajusta rotação do personagem
transform.rotation = targetRotation;
}
}
//Caso o personagem não esteja no ponto clicado ele anda até lá
//print((transform.position – seta.position).magnitude);
if((transform.position – seta.transform.position).magnitude > 2){
transform.Translate(Vector3.forward * ( Time.deltaTime * vel));
//seta animação dele andando
Animacao.clip = clipes[1];
Animacao.Play();
}else{
//seta animação dele parado
Animacao.clip = clipes[0];
Animacao.Play();
}
}
Salvei o scipt, agora temos qu clocar esse script no personagem, apertei no personagem ( eu uso o personagem que veio com o Unity ) e arrastei o anda para o inspector. Não entedi cmo vc consequio colocar o anda cmo animação. E tambem nã entedi como coloco nosi elements as coisas:
Elementos 0 > Anda
Elemento 1 > parado
Elemento 2 > soco
Elemento 3 > pulo
Elemento 4 > correndo
Obrigado desde ja pela ajuda.
POR FAVOR RESPONDE MINHA PERGUNTA
09/11/2013 às 19:50
MAIS UM DETALHE
QUANDO DO PLAY NO JOGO E CLIKO APARECE UM CUBO
09/11/2013 às 19:54