O documento discute scripts em Unity 3D, cobrindo tópicos como:
1) Como criar e editar scripts;
2) Como usar funções como Update() para controlar ações no jogo;
3) Como capturar input do jogador e usar variáveis para controlar valores como velocidade.
2. Unity
• Regra PLAY:
– Edição durante Play mode é temporária
(perdida quando desligamos play)
– Intenção:
• Testar novos parâmetros durante gameplay
– Ganho tempo, resultados experimentados diretamente
• EX: mudar velocidades player
3. Unity : Script
• Scripts :
– Controle do jogo (interatividade)
– Ações game baseadas em tempo / local
– Ações game baseadas em intenção : Input
• Input:
– Avaliar teclas e controles (mouse e joy)
– Executar ações necessárias
4. Unity : Script
• Criar um Script:
– Assets -> Create -> JavaScript
– Renomear Script (organização): Move1
• Duplo click para edição
(UniSciTE : Editor scripts)
5. Unity : Script
• Scripts iniciam com função Update
function Update() { }
• Update()
– vai rodar função (o que estiver dentro) a cada
ciclo de jogo - a cada tela renderizada
• Várias funções nomes próprios, auto
executadas com respectivos eventos, EX:
– Awake(): quando executado a primeira vez
– OnCollisionEnter(): quando colide
– Etc...
6. Unity : Script
• Movimento básico de objeto =
alterar propriedades transform do objeto,
Position X, Y, Z
• Perceber intenção = Input
• Gerar o movimento baseado no Input
7. Unity : Script
• Captar Input Básico:
– Input.GetAxis("Horizontal“)
– Input.GetAxis(“Vertical”)
• Recebe (auto) teclas WASD, Setas
(cursores) e Joysticks (Joypad)
• Valores de Retorno: -1.. 0 ..1
• 0 = sem move
• Joystick = valores intermediários
/ max
• Teclas = valor Maximo direto (1,
0 ou -1)
8. Unity : Script
• Codificando:
function Update () {
//CAPTURA INPUT BASICO
var forca_horizontal =
Input.GetAxis("Horizontal");
var forca_vertical =
Input.GetAxis("Vertical");
//MOVE COM TRANSLATE = movimento traduzido
transform.Translate(forca_horizontal, 0,
forca_vertical);
}
9. Unity : Script
• transform.Translate
• Movimento traduzido = pela orientação do
objeto (ângulo para onde aponta)
• 3 parametros: X, Y, Z
• Forma direta = altera o objeto a qual o script
está atachado
• Atachar Script = drag-drop sobre objeto
10. Unity : Script
• Movimento provavelmente rápido
• Necessidade de definir velocidades
adequadas
• Necessidade de perceber o Frame Rate
– Rodando a 60 FPS ( 60 updates por segundo)
– Rodando a 200 FPS ( 200 por segundo)
= Resultados muito diferentes pelo FPS
• EX: adicionar um grau a rotação, sem
controle de FPS rotaria de acordo com o
número de updates
11. Unity : Script
• Correção de valores pelo FPS
“ Time.deltaTime “
• Geral:
– multiplicamos valores pelo deltaTime = garantia de
adaptação a diferentes FRAME RATES
• Onde usar:
– Movimentos, rotações, timer e cálculos em geral...
• Onde NÃO Usar:
– Cálculos fixos, estatísticas:
• número de tiros, pontos...
12. Unity : Script
• Adaptando nosso Script Básico de
movimento
• Capturamos / Percebemos o Input
• Multiplicamos o Input
– pela velocidade (max. que queremos)
– pelo tempo (Time.deltaTime)
• Necessidade para adaptação a FRAME RATE
13. Unity : Script
function Update () {
//CAPTURA INPUT BASICO
var forca_horizontal = Input.GetAxis("Horizontal");
var forca_vertical = Input.GetAxis("Vertical");
//CRIAMOS VAR = VELOCIADE DO MOVIMENTO
var velocidade = 10;
//MULTIPLICAMOS INPUT POR VELOCIDAE E TEMPO
forca_horizontal *= velocidade * Time.deltaTime;
forca_vertical *= velocidade * Time.deltaTime;
//PASSA COMO TRANSLATE = movimento traduzido
transform.Translate(forca_horizontal, 0, forca_vertical);
}
14. Unity : Script
• Variáveis Exposed / Não
• Exposed:
– Colocadas fora de funções (início do Script)
– Podem ser acessadas / alteradas pelo Inspector
//fora de funções = var exposed
var velocidade = 10;
function Update () {
....
15. Unity : Script
• Inputs adicionais:
Input.GetButtonDown("Jump")
Input.GetButtonDown(“Fire1")
• Retorno: 1 = pressionado
• Ex: fire1, leva objeto para ponto da cena
if (Input.GetButtonDown("Fire1")) {
transform.position.x = 0; transform.position.y
= 0; transform.position.z = 0;
}
16. Unity : Script
• Vector3(X, Y, Z)
– Vetor de 3 posições
– Muito utilizado, passagem de três parâmetros diretamente
if (Input.GetButtonDown("Fire1")) {
//transform.position.x = 0;
//transform.position.y = 0;
//transform.position.z = 0;
//MESMO RESULTADO = única linha
transform.position = Vector3(0,0,0);
}
17. Unity : Script
• Input = Teclas especificas
Input.GetKey(“x”);
• Ex. Teclas O e P modificam rotação Y
básica do objeto
if (Input.GetKey("o")) {
transform.rotation.y -= 1 * Time.deltaTime;
}
if (Input.GetKey("p")) {
transform.rotation.y += 1 * Time.deltaTime;
}
18. Unity : Script
• Controle de velocidades, fatores
= Utilizar Variáveis
• Expor Variáveis = facilidade
• Testar
– Modificar a rotação, usando velocidade por
variável
– Expor a variável (permite alterar pelo inspector)