Aula 2: Unity Scripting

Corpo Padrão de um Script C# Unity

Antes de começar a desenvolver um projeto com Unity, uma boa prática é estruturar os diretórios do projeto. Crie as seguintes pastas:

C:\Users\CamiloCG\AppData\Local\Microsoft\Windows\INetCache\Content.Word\Captura de tela 2016-05-11 19.16.45.png

Para criar um Script em C#:

  1. Na pasta Scripts clique com o botão direito, abrirá uma tela. Selecione Create> C# Script.
  2. Digite o nome do Script.

Corpo padrão de um Script C# (Nome: Movimento):

using UnityEngine;

using System.Collections;

public class Movimento : MonoBehaviour

{

    // Use this for initialization

    void Start()

    {

        //Dentro deste método seu código irá executar apenas uma vez

        //quando seu jogo começar a executar

    }

    // Update is called once per frame

    void Update()

    {

        //Dentro deste método, seu código irá atualizar a cada frame da tela

    }

}

Primeiro Hello World

using UnityEngine;

using System.Collections;

public class Movimento : MonoBehaviour

{

    // Use this for initialization

    void Start()

    {

        Debug.Log("Hello World!");

    }

    // Update is called once per frame

    void Update()

    {

    }

}

using UnityEngine;

using System.Collections;

public class Movimento : MonoBehaviour

{

    int i = 0;

    // Use this for initialization

    void Start()

    {

        Debug.Log("Hello World!");

    }

    // Update is called once per frame

    void Update()

    {

        Debug.Log(i++);

    }

}

Principais propriedades de um GameObject:

  1. transform.positon: Get e Set da posição do GameObject

Exemplo:  transform.position = new Vector3(0, 0, 0);

  1. transform.Rotate: Set a rotação de um GameObject

Exemplo: transform.Rotate(new Vector3(0, 1, 0), 1);

Rotaciona no eixo Y, com ângulo de 1 grau a cada frame

  1. transform.localScale: Get e Set da escala do GameObject

Exemplo: transform.localScale = new Vector3(2, 2, 1);

Translação de GameObjects

using UnityEngine;

using System.Collections;

public class Movimento : MonoBehaviour

{

    // Use this for initialization

    void Start()

    {

    }

    // Update is called once per frame

    void Update()

    {

        transform.position = new Vector3(transform.position.x + Time.deltaTime, 0, 0);

    }

}

Rotação de GameObjects

using UnityEngine;

using System.Collections;

public class Movimento : MonoBehaviour

{

    // Use this for initialization

    void Start()

    {

    }

    // Update is called once per frame

    void Update()

    {

        transform.Rotate(Vector3.up, Time.deltaTime * 4);

    }

}

Escalação de GameObjects

using UnityEngine;

using System.Collections;

public class Movimento : MonoBehaviour

{

    public int D = 0;

    // Use this for initialization

    void Start()

    {

        Debug.Log("Hello World!");

    }

    // Update is called once per frame

    void Update()

    {

        float s = Mathf.Sin(D++ * 0.1f);

        transform.localScale = new Vector3(s, s, s);

    }

}

Inputs: Teclado

Para acessar os dados de input do teclado, utilize os métodos:

Input.GetKey(*)

Input.GetKeyDown(*)

Input.GetKeyUp(*)

(*) KeyCode.tecla

if(Input.GetKeyDown(KeyCode.W))

{

    Debug.Log("Olá Mundo!");

}

Exemplo:

using UnityEngine;

using System.Collections;

public class Movimento : MonoBehaviour

{

    void Start()

    {

    }

    // Update is called once per frame

    void Update()

    {

        if(Input.GetKeyDown(KeyCode.W))

        {

            Debug.Log("Olá Mundo!");

        }

    }

}

Movendo um GameObject

Teclas de controle: W e S move para frente e para trás

Teclas de controle: A e D move para os lados

Exemplo com translação:

using UnityEngine;

using System.Collections;

public class Movimento : MonoBehaviour

{

    public float velocidade = 3f;

    // Use this for initialization

    void Start()

    {

    }

    // Update is called once per frame

    void Update()

    {

        if(Input.GetKey(KeyCode.W))

        {

            transform.position = new Vector3(transform.position.x + (Time.deltaTime) * velocidade, 0, transform.position.z);

        }

        if(Input.GetKey(KeyCode.S))

        {

            transform.position = new Vector3(transform.position.x - (Time.deltaTime) * velocidade, 0, transform.position.z);

        }

        if (Input.GetKey(KeyCode.A))

        {

            transform.position = new Vector3(transform.position.x, 0, transform.position.z + (Time.deltaTime) * velocidade);

        }

        if (Input.GetKey(KeyCode.D))

        {

            transform.position = new Vector3(transform.position.x, 0, transform.position.z - (Time.deltaTime) * velocidade);

        }

    }

}

Exemplo com aplicação de força:

using UnityEngine;

using System.Collections;

public class Movimento : MonoBehaviour

{

    public float impulso = 3f;

    public Rigidbody rb;

    // Use this for initialization

    void Start()

    {

        rb = GetComponent<Rigidbody>();

    }

    // Update is called once per frame

    void Update()

    {

        if(Input.GetKey(KeyCode.W))

        {

            Vector3 movement = new Vector3(1, 0.0f, 0);

            rb.AddForce(movement * impulso);

        }

        if(Input.GetKey(KeyCode.S))

        {

            Vector3 movement = new Vector3(-1, 0.0f, 0);

            rb.AddForce(movement * impulso);

        }

        if (Input.GetKey(KeyCode.A))

        {

            Vector3 movement = new Vector3(0, 0.0f, 1);

            rb.AddForce(movement * impulso);

        }

        if (Input.GetKey(KeyCode.D))

        {

            Vector3 movement = new Vector3(0, 0.0f, -1);

            rb.AddForce(movement * impulso);

        }

    }

}