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.

Unity

Vídeo

Tutorial Unity 3D para Iniciantes Parte 1


Script Chat em Unity

Olá,como tem muita gente com dificuldades criei um script simples com função para Chat.

Obs:

Adicione este script no seu GameObject, adicione também o componente NetworkView(esta no menu Components/Miscellaneuos/Network View.

// Declarando as Variáveis
var JanelaChatPos;
var ConexaoPos;
var retornoNet;
var MensagemParaEnviar;
var PosicaoDoScroll;
var Historico;
var HistMsg;

//Executado quando o game é iniciado, aqui carregamos algumas variáveis
function Start()
{
	PosicaoDoScroll =Vector2.zero;
	Historico = new Array ();
	MensagemParaEnviar = "escreva sua mensagem aqui";
	retornoNet = ConnectionTesterStatus.Undetermined;
}

// Aqui mandamos escrever na tela os dados das janelas
function OnGUI()
{
	JanelaChatPos = GUI.Window (0, Rect(0, 0, 300, 400), JanelaChat, "Janela de Chat");
	ConexaoPos = GUI.Window(1, Rect(301, 0, 200, 280), Conexao, "Janela de Conexão");
}

// tag RPC
@RPC

// Aqui gravamos os textos no histórico
function EnviaMsg (msg : String)
{
	Historico.Reverse();
	Historico.Push(msg);
	Historico.Reverse();
}

// Função principal do chat
function JanelaChat (ID : int)
{
	GUILayout.Label("Histórico");
	GUILayout.BeginVertical();
	PosicaoDoScroll = GUILayout.BeginScrollView (
	PosicaoDoScroll, GUILayout.Width (280), GUILayout.Height (200));

	for(var i:int=0;i < Historico.length; i++){
		GUILayout.Label(Historico[i]);
	}

	GUILayout.EndScrollView();

	MensagemParaEnviar = GUILayout.TextArea(MensagemParaEnviar);

	if (GUILayout.Button("Enviar")) {
		networkView.RPC("EnviaMsg", RPCMode.All, MensagemParaEnviar); MensagemParaEnviar = "";
	}

	GUILayout.EndVertical();
	GUI.DragWindow ();
}



// Função da Janela Conexão
function Conexao (ID : int)
{
	GUILayout.Label(retornoNet.ToString());

	if (GUILayout.Button("Testar NAT")) {
	retornoNet = Network.TestConnection();}

	GUILayout.Label("Tipo da Conexão: ");

	if (GUILayout.Button("Iniciar Servidor")){
		Network.useNat = true;
	Network.InitializeServer(6, 25002);}

	if (GUILayout.Button("Registrar Servidor")){
	MasterServer.RegisterHost("Teste1", "Teste2");}

	if (GUILayout.Button("Checar lista de Servidores") ){
		MasterServer.ClearHostList();
	MasterServer.RegisterHost("Teste1", "Teste2");}

	if (GUILayout.Button("Desconectar")){
	Network.Disconnect(200);}

	if (MasterServer.PollHostList().length != 0) {
		var hostData: HostData[] = MasterServer.PollHostList();
		for (var i:int=0; i < hostData.length;i++){
			GUILayout.Label("Jogo: " + hostData[i].gameName);
			GUILayout.Label("OnLine: " + hostData[i].connectedPlayers.ToString() + "/" + hostData[i].playerLimit.ToString());
			if (GUILayout.Button("Connectar") ){
				Network.useNat = true;
				MasterServer.RegisterHost("Teste1", "Teste2");
				Network.Connect(hostData[i].ip, hostData[i].port);
			}
		}

	}
}



// Atualiza a lista de Servidores disponíveis
function Update()
{
	MasterServer.RequestHostList("Teste1");
}

Criando jogo MMORPG – Parte 4

Parte 4 Multiplayer.

Criando o Servidor/Cliente

Vamos agora começar a colocar nosso jogo como Multiplayer, faremos o mesmo jogo como sendo Servidor e Cliente, vamos lá.

Abra a cena da Abertura, vá à aba Project e de 2 cliques no script animaLogo.

Apague todo o conteúdo do arquivo e coloque este código.

//Anima logo - Emerson Reis

//Variavel que diz para o script quando mostrar a tela de login

private var mostraLogin:boolean =  false;

function Start () {

//coloca a imagem como alpha 0

gameObject.GetComponent(GUITexture).color.a = 0;

//chama a animação

anime(gameObject.GetComponent(GUITexture));

}

function anime(gt:GUITexture){

//Faz efeito de alpha para aparecer

while(gt.color.a < .5){

gt.color.a+=0.01;

yield WaitForSeconds(0.1);

}

//Espera 2 segundos

yield WaitForSeconds(2);

//faz efeito de alpha para desaparecer

while(gt.color.a > 0){

gt.color.a-=0.01;

yield WaitForSeconds(0.1);

}

//libera para mostrar a tela de login

mostraLogin = true;

}

private var nome : String = "digite seu nome aqui";

private var Eservidor = false;

function OnGUI ()

{

//caso não seja hora de mostrar sai

if(!mostraLogin)return;

//cria uma área no centro da tela

GUI.BeginGroup(Rect(Screen.width/2-75,Screen.height/2-50,150,150));

//cria um quadrado preto

GUI.Box(Rect(0,0,150,150),"Login");

//crua um layout vertical

GUILayout.BeginVertical();

GUILayout.Label("");

//escreve o textio nome

GUILayout.Label("Nome");

//caixa de texto

nome = GUILayout.TextField(nome);

//Cria o campo para definir se é Servidor

Eservidor = GUILayout.Toggle(Eservidor,"Servidor");

GUILayout.EndVertical();

//coloca os dados na horizontal

GUILayout.BeginHorizontal();

//Aqui carrega a próxima cena

if(GUILayout.Button("Entrar")){

//grava na memoria o nome do jogador

PlayerPrefs.SetString("nome_jogador",nome);

//Grava se é servidor ou não

PlayerPrefs.SetString("eServidor","não");

if(Eservidor){

PlayerPrefs.SetString("eServidor","sim");

}

//carrega a cena, escreva aqui o nome que vc salvou a cena anterior, feita no tutorial anterior, no meu caso cena1

Application.LoadLevel("cena1");

};

//fecha o jogo

if(GUILayout.Button("Sair")){

Application.Quit();

};

GUILayout.EndHorizontal();

GUI.EndGroup();

}

 

Salve e volte para o Unity, teste e veja que aparece um checkbox Servidor, caso ele esteja selecionado o PC será o servidor.

Salve tudo e volte para a cena do jogo.

Crie um novo JavaScript e renomei-o para multiplayer.

Clique 2x para editar e insira o seguinte código.

var ip:String = "127.0.0.1";

var porta:int = 777;

var player_Pref : GameObject;

function Start () {

if(PlayerPrefs.GetString("eServidor") == "sim"){

//Aqui iniciamos o servidor para no máximo 10 conexões na porta 777

Network.InitializeServer(10,porta);

} else{

//Conecta como cliente

Network.Connect(ip,porta);

}

}

function OnPlayerConnected (player : NetworkPlayer)

{

//Mostra q conectou

print("Jogador "+player.externalIP+" conectado");

}

function OnConnectedToServer ()

{

//Parametros:GameObject do Jogador, posição inicial no mapa,rotação inicial e grupo 0:Servidor,1:Player

var eu = Network.Instantiate(player_Pref, Vector3(938,1,113),Quaternion.identity,1);

//Manda a camera seguir

GetComponent("SmoothFollow").target = eu.transform;

}

function OnServerInitialized ()

{

//Parametros:GameObject do Jogador, posição inicial no mapa,rotação inicial e grupo 0:Servidor,1:Player

var eu = Network.Instantiate(player_Pref, Vector3(938,1,113),Quaternion.identity,0);

//anda a camera seguir

GetComponent("SmoothFollow").target = eu.transform;

}

Selecione a Camerana Janela Hierarchy e arraste o script criado para ele.

Vamos agora criar nosso Prefab do personagem:

Na janela Hierarchy selecione o Pesonagem e adicione o Componente Network View.

Agora vá para a Janela Object e crie um novo Prefab(clique com o botão direito do mouse e vá em Create-Prefab.

Renomeio para Personagem.

Arraste o Personagem da Janela Hierarchy para o Personagem Prefab que criamos na janela Project.

Pronto, Prefab criado, agora apague o Personagem da janela Hierarchy, ele será criado em tempo de execução daqui para frente.

Selecione a Camera na janela Hierarchy e arraste o Prefab criado para o campo Player_Pref.

Agora abra o script personagem e inclua o seguinte comando na função Update.

//Evita duplo controle

if(!networkView.isMine)return;

para facilitar vou colocar todo o script Personagem novamente abaixo:

//****Variaveis****

//Velocidade de movimentaçãp

var vel:int;

//Componente de animação

var Animacao : Animation;

//Clipes de animação

var clipes:AnimationClip[];

var nome:String;

//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);

//Usar o nome escolhido na tela de apresentação

nome = PlayerPrefs.GetString("nome_jogador");

//seta.addComponent(Rigidbody);

}

//Função UPDATE

function Update() {

//Evita duplo controle

if(!networkView.isMine)return;

//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();

}

}

//*****tutorial 3

private var texto:String;

private var textoTemp:String;

private var falando = false;

function OnGUI ()

{

if(!falando)

textoTemp = GUI.TextArea(Rect(0,0,200,30),textoTemp);

var posicao  = Camera.main.WorldToScreenPoint (transform.position);

GUI.color = Color.red;

GUI.Label(new Rect(posicao.x-50,posicao.y-220,300,30),nome+texto);

}

function FixedUpdate(){

if(Input.GetKeyUp(KeyCode.Return) ){

if(textoTemp == ""){

falando = false;

}else{

fala();

}

}

}

function fala(){

falando = true;

texto ="-" + textoTemp;

textoTemp = "";

yield WaitForSeconds(5);

texto = "";

falando = false;

}

Salve tudo e vamos agora testar.

Como é um projeto multiplayer vc precisará executar 2 instancias do jogo, uma como servidor e outra como Cliente,vamos gerar o projeto.

Vá em File/Build Settings

Em Scenes in Build adicione as 2 cenas (arraste as cenas para esta janela) sendo a primeira a da abertura.

Selecione PC and Mac… em Plataform.

Clique em Player Settings e  na janela Inspector marque a caixa Run in Blackround, isto fara com que o jogo não pause quando perder o foco, afinal vc não conseguirá manter o foco nos 2 .

Salve e Clique em Build, escolha o nome do jogo e o local e espere gerar.

Vá na pasta criada e execute o programa 2x, na tela de login marque 1 como servidor e clique em Entrar, depois que o jogo estiver iniciado clique em Entrar no segundo game aberto, observe que os 2 player estarão no jogo, cada qual com seu controle.

Não se preocupe se a animação dos 2 personagens e o nome não está funcionando, iremos tratar isto no próximo tutorial.

Até lá e Fiquem com deus!


Lista de jogos feito em Unity

Olá, abaixo uma lista de jogos feitos em Unity, só para ver a força do motor.

 http://battlestar-galactica.bigpoint.com/

http://www.nplay.com/BeGone/

http://blurst.com/blush/

http://kinelco.com/site/all/3d/extreme-cabbie.html

http://www.fusionfall.com/

http://www.monkeyquest.com/

http://www.ruined.com/

http://www.runespell.com/

http://starwars.lego.com/en-us/funandgames/CloneWars-Quest-For-R2D2.aspx

http://tigerwoodsonline.ea.com/

http://uberstrike.cmune.com/

e muito mais.


Usando modelos do Google Sketchup no Unity 3d

Usando modelos do google sketchup no Unity 3d.

Esterei mostrando neste tutorial como usar objetos do  sketchup no Unity 3d, para quem não sabe,  o sketchup é um programa de modelagem da Google muito fácil de usar, mas o que  é mais interessante nele é o armazém 3D, nele você pode encontrar  praticamente qualquer coisa e usar o modelo, então vamos lá.

Primeiramente é necessário ter o programa, para poder exportar você precisará do sketchup modelo Pro disponível no link http://www.megaupload.com/?d=NTSINZJU .

Abra o sketchup e apague o modelo padrão(esta pessoa na tela).

Clique em Get Models

A tela abaixo irá aparecer, note que é bem parecido com a pesquisa Google tradicional, pesquise o que você deseja.

Quando encontrar o modelo que lhe agrade, clique em Download Model

O programa irá perguntar se você deseja adicionar a cena, responda que sim, o modelo sera baixado e adicionado a sua cena.

Se quiser salve o modelo para não ter que baixar mais.

Á em File/Export/3D Model

Na tela seguinte escolha o tipo 3DS ou FBX para exportar, ambos são aceitos pelo Unity.

Clique em Export e pronto!

Se o modelo escolhido tiver textura, o programa irá criar uma pasta com o mesmo nome do modelo e colocará as texturas lá.

Abra o Unity e arraste primeiro a pasta com as texturas e depois o modelo para a janela Project.

Agora é só pegar o objeto importado e adicionar a Cena(basta arrastar o objeto para a janela Scene).

Fácil assim:

T+ e Fiquem com Deus!


Criando jogo MMORPG – Parte 3

Usando o Nome Escolhido.

Volte para a cena do jogo(cena que tem o personagem criada no 1º tutorial), de 2 cliques no script anda na Janela Project para edita-lo.

No inicio do script onde tem as variáveis declaradas, declare a variável nome da seguinte forma.

var nome:String;

Procure a função Start e dentro dela adicione os seguintes comandos:


//Usar o nome escolhido na tela de apresentação

nome = PlayerPrefs.GetString("nome_jogador");

No final do Script adicione estes comandos:


private var texto:String;

private var textoTemp:String;

private var falando = false;

function OnGUI ()

{

if(!falando)

textoTemp = GUI.TextArea(Rect(0,0,200,30),textoTemp);

var posicao  = Camera.main.WorldToScreenPoint (transform.position);

GUI.color = Color.red;

GUI.Label(new Rect(posicao.x-50,posicao.y-220,300,30),nome+texto);

}

function FixedUpdate(){

if(Input.GetKeyUp(KeyCode.Return) ){

if(textoTemp == ""){

falando = false;

}else{

fala();

}

}

}

function fala(){

falando = true;

texto ="-" + textoTemp;

textoTemp = "";

yield WaitForSeconds(5);

texto = "";

falando = false;

}

De Play para testar.

Aperte ENTER que aparecera uma caixa de texto no canto superior esquerdo, digite um texto lá e de ENTER para enviar uma mensagem para o jogo.

Para ajudar a entender, este é assim que o script anda deve ficar:

//****Variaveis****

//Velocidade de movimentaçãp

var vel:int;

//Componente de animação

var Animacao : Animation;

//Clipes de animação

var clipes:AnimationClip[];

var nome:String;

//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);

//Usar o nome escolhido na tela de apresentação
nome = PlayerPrefs.GetString("nome_jogador");

//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();

}

}

//*****tutorial 3
private var texto:String;
private var textoTemp:String;
private var falando = false;
function OnGUI ()
{
	if(!falando)
	textoTemp = GUI.TextArea(Rect(0,0,200,30),textoTemp);
	var posicao  = Camera.main.WorldToScreenPoint (transform.position);
	GUI.color = Color.red;
	GUI.Label(new Rect(posicao.x-50,posicao.y-220,300,30),nome+texto);

}

function FixedUpdate(){
	if(Input.GetKeyUp(KeyCode.Return) ){
		if(textoTemp == ""){
			falando = false;
		}else{
			fala();
		}
	}

}

function fala(){
	falando = true;
	texto ="-" + textoTemp;
	textoTemp = "";
	yield WaitForSeconds(5);
	texto = "";
	falando = false;
}

Na parte 4 iremos criar a conexão Multiplayer, ela já está pronta, apenas estou ajustando tudo, esta parte é mais complexa e estou tentando deixar bem explicada.

Até e Fiquem com Deus!!


Game para esudo, Sinuca 3D com unity

Mais um Game que fiz para estudo, quem quiser jogar pode testar em r-sinuca.


Criando jogo MMORPG – Parte 2

MMORPG parte 2

Neste tutorial iremos fazer a tela de abertura do nosso game, vamos lá!

Crie uma nova cena, vá a File/New Scene ou simplesmente de CTRL+N.

Salve a cena (CTRL+S) com o nome de abertura.

Vamos agora fazer aparecer o logo do desenvolvedor, antes de qualquer coisa vamos criar uma ima imagem png que ira aparecer na abertura, no meu caso criei uma imagem simples usando o photoshop.

OBS: Faça uma imagem com tamanho de 640×480, não se esqueça de deixar com fundo transparente caso deseje, salve no formato png em qualquer pasta.

Agora importe para o Unity, basta arrastar a imagem salva para a pasta Project do Unity.

Selecione a imagem importada na janela Project e vá em GameObject/Create Other/GUI Texture, você verá que sua imagem ficara no centro da tela Scene e também na Game, além disso foi criado um objeto novo com o nome da sua imagem.

Salve e teste.

Animando

Vamos agora animar a imagem, crie um novo javascript e renomei-o  para animaLogo, clique 2x e cole o seguinte código.


//Anima logo - Emerson Reis

//Variavel que diz para o script quando mostrar a tela de login

private var mostraLogin:boolean =  false;

function Start () {

//coloca a imagem como alpha 0

gameObject.GetComponent(GUITexture).color.a = 0;

//chama a animação

anime(gameObject.GetComponent(GUITexture));

}

function anime(gt:GUITexture){

//Faz efeito de alpha para aparecer

while(gt.color.a < .5){

gt.color.a+=0.01;

yield WaitForSeconds(0.1);

}

//Espera 2 segundos

yield WaitForSeconds(2);

//faz efeito de alpha para desaparecer

while(gt.color.a > 0){

gt.color.a-=0.01;

yield WaitForSeconds(0.1);

}

//libera para mostrar a tela de login

mostraLogin = true;

}

private var nome : String = "digite seu nome aqui";

function OnGUI ()

{

//caso não seja hora de mostrar sai

if(!mostraLogin)return;

//cria uma área no centro da tela

GUI.BeginGroup(Rect(Screen.width/2-75,Screen.height/2-50,150,100));

//cria um quadrado preto

GUI.Box(Rect(0,0,150,100),"Login");

//crua um layout vertical

GUILayout.BeginVertical();

GUILayout.Label("");

//escreve o textio nome

GUILayout.Label("Nome");

//caixa de texto

nome = GUILayout.TextField(nome);

GUILayout.EndVertical();

//coloca os dados na horizontal

GUILayout.BeginHorizontal();

//Aqui carrega a próxima cena

if(GUILayout.Button("Entrar")){

//grava na memoria o nome do jogador

PlayerPrefs.SetString("nome_jogador",nome);

//carrega a cena, escreva aqui o nome que vc salvou a cena anterior, feita no tutorial anterior, no meu caso cena1

Application.LoadLevel("cena1");

};

//fecha o jogo

if(GUILayout.Button("Sair")){

Application.Quit();

};

GUILayout.EndHorizontal();

GUI.EndGroup();

}

Salve, volte para o Unity e arraste este script para o objeto logo.

Não execute ainda, precisamos configurar o projeto para poder chamar as cenas nas seqüências corretas.

Vai em File/Build Settings ou de CTRL+SHIFT+B, a seguinte tela aparecerá.

Clique em Add Current para adicionar a cena atual ao registro de inicialização do projeto e em seguida arraste a cena criada no tutorial anterior, a tela deverá ficar assim:

Agora clique em Play (CTRL+P), assista a introdução do logo, coloque seu nome e clique em Entrar, você verá que a cena anterior com o jogo será carregada.

No próximo tutorial irei mostrar como fazer o personagem “assumir” o nome escolhido na tela criada neste tutorial, até lá.


No fundo do mar com Unity

Novo projeto.


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.

Parte 2