Mostrando postagens com marcador unity 3d. Mostrar todas as postagens
Mostrando postagens com marcador unity 3d. Mostrar todas as postagens

quarta-feira, 7 de setembro de 2011

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