quarta-feira, 7 de setembro de 2011

Fundamentos da programação javascript na unity parte 2

No script anterior nós entendemos como funcionam as variáveis na unity,mas e a parte que tem function Update?
Bem,essa parte é uma função,funções são partes do código que realizam alguma tarefa.Existem vários tipos de função na unity  veja as principais e o que elas fazem:
Update-O código que está dentro dela é executado a cada frame
Start-O código que está dentro dela é executado quando a cena começa
OnCollisionEnter-O código que está dentro dela é executado quando o objeto que possui o script colide com alguma coisa.
Você pode criar suas próprias funções,por exemplo abra o script da aula anterior e digite isso:

var b=10;
var c=2;
function Update () {
Debug.Log(soma);
}
function soma()
{
return b+c;
}
Agora a barra cinza está indicando 12,que é 10+2(b+c).Como você pode ver o comando return serve para retornar algum valor passado pela função.
É isso aí acho que já é suficiente para começar,agora você pode ver os meu videos no youtube e começar a entender as coisa lá.
Até a próxima!

Fundamentos da programação javascript na unity parte 1

Pecebi que os tutoriais anteriores exigiam um certo conhecimento de programação,então resolvi criar essa série de tutoriais pra ensinar um pouco dos fundamentos da programação na unity 3d com javascript.

  • Javascript não é java e não tem quase nada parecido com java
É bom deixar isso bem claro porque os iniciantes se confundem muito com esses conceitos.

  • Qualquer linguagem da unity tem o mesmo poder
Todas a linguagens de script(c#,boo,js) possuem a mesma velocidade e em um jogo o resultado final usando qualquer uma delas sempre dará no mesmo,use a linguagem que te deixa mais confortável(até e projetos grandes cada membro da equipe pode gostar de linguagens diferentes).
Agora vamos começar com o tutorial:

  • Variáveis
Um conceito bem importante é o de variável,variáveis são objetos onde nós podemos armazenar valores,por exemplo crie um script coloque um nome qualquer a ele e o insira na câmera,abra o editor de códigos e digite isso:

var a:int=5;
function Update () {
Debug.Log(a);
}


Na linha var a:int=5; nós declaramos o valor 5 a variável "a" que é do tipo inteiro(por isso o :int)
Depois de colocar o script na camera toque o jogo pra ver no que dá:

O comando Debug.Log faz com que o valor de a apareça na telinha cinza.Se você quiser pode mudar o valor de a no editor,clicando na câmera e mudado o valor da a como a imagem mostra:

Existem vários tipos de váriaveis como float(valores não inteiros),string(textos),GameObject(game objects).
Essa foi a primeira parte,na segunda parte aprenderemos sobre funções,até a próxima!

Movimento avançado de personagens com Character Controller

Se você assistiu os videos anteriores,já percebeu que o script de movimento do personagem usado neles não funciona muito bem.Mas por que?
A resposta é simples,o script apenas muda a posição do objeto enquanto quem cuida das "interações físicas" é o rigidbody e as simulações feitas por esse componente não são muito boas para personagens,então nós devemos usar outro tipo de componente voltado para personagens na unity esse componente se chama Character Controller.
Abra a unity coloque um cubo,um plano e uma luz na cena posicione pra ficar mais ou menos assim:
Ok,agora vamos ao script,crie um novo javascript chame-o de move ou andar ou algo do tipo(é bom colocar nomes que expliquem bem o que o script faz porque quando seu projeto ficar grande você pode se perder nos códigos).Dê dois cliques no script e dentro do editor de códigos cole isso aqui:
var speed : float = 6.0;

var jumpSpeed : float = 8.0;

var gravity : float = 20.0;

var rotspeed:float=3.0;

private var moveDirection : Vector3 = Vector3.zero;



function Update() {

var hor=Input.GetAxis("Horizontal");

var vert=Input.GetAxis("Vertical");

    var controller : CharacterController = GetComponent(CharacterController);

    if (controller.isGrounded) {

       

        moveDirection = Vector3(0, 0,vert);

        moveDirection = transform.TransformDirection(moveDirection);

        moveDirection *= speed;

        transform.Rotate(0,hor*rotspeed,0);

        if (Input.GetButton ("Jump")) {

            moveDirection.y = jumpSpeed;

        }

    }



    

    moveDirection.y -= gravity * Time.deltaTime;

    

    

    controller.Move(moveDirection * Time.deltaTime);

}

@script RequireComponent(CharacterController)
Arraste o script para o cubo,bote o jogo pra tocar e brinque um pouco,como você pode ver esse script esta pronto para ser usado em qualquer tipo de jogo de plataforma 3d(Mario 64) a TPS(Gears of War).Agora vamos a explicação desse código:
var jumpSpeed : float = 8.0;

var gravity : float = 20.0;

var rotspeed:float=3.0;
Essas variáveis indicam a velocidade do pulo(jumpSpeed) a gravidade(gravity) e a velocidade de rotação(rotspeed).
private var moveDirection : Vector3 = Vector3.zero;
Essa variável indica a direção do movimento do player.
var hor=Input.GetAxis("Horizontal");

var vert=Input.GetAxis("Vertical");

var controller : CharacterController = GetComponent(CharacterController);
Aqui temos uma variável para representar o eixo horizontal do teclado , outra para representar o eixo vertical e mais uma para representar o componente Character Controller.
if (controller.isGrounded) {
 moveDirection = Vector3(0, 0,vert);

        moveDirection = transform.TransformDirection(moveDirection);

        moveDirection *= speed;

        transform.Rotate(0,hor*rotspeed,0);

        if (Input.GetButton ("Jump")) {

            moveDirection.y = jumpSpeed;

        }

    }
Esse if (controller.isGrounded) quer dizer se o personagem estiver no chão,colocamos a direção dele para ser guiada no eixo z pelo vertical do teclado.O moveDirection *= speed multiplica o moveDirection para ter velocidade. transform.Rotate(0,hor*rotspeed,0) faz a rotação de player multiplicando pela velocidade de rotação.O if (Input.GetButton ("Jump")) serve para mudar o eixo y para a velocidade de pulo(jumpSpeed).moveDirection.y -= gravity * Time.deltaTime Faz a gravidade cuidar da altura do player(caso ele não esteja no chão).@script RequireComponent(CharacterController) Coloca um Character Controller no objeto.
Referencias
Character Controller
Time.deltaTime

Bom jogo e até a próxima!
Aqui você pode ver a cena que eu fiz com esse script

Novo Canal no Youtube

Fiz um novo canal no youtube porque acabei tendo uns problemas com minha conta antiga do google.
Quem quiser se inscrever clique aqui

sábado, 3 de setembro de 2011

Série de tutoriais Unity 3d

Eu fiz essa série de tutoriais de unity 3d a algum tempo,mas são bem legais pra quem está começando:

É isso espero que essas aulas ajudem,vou fazer outros tutoriais sobre assuntos mais avançados,mesclando videos com texto(os que envolverem mais programação eu vou fazer em texto mesmo).
Até a próxima:D

Hello World!

Bem é isso aí!Primeiro post...Espero poder colocar aqui neste blog as minhas experiências de final de semana e quem sabe até ensinar alguma coisa a alguém...
É isso aí
main( )
 {
        printf("hello, world");
 }