Cursos / Jogos Digitais / Desenvolvimento com Motores de Jogos I / Aula

arrow_back Aula 10 - Desenvolvendo a Primeira Fase - Parte 2

3. Adicionando Plataformas Móveis

3.1 Plataforma móvel com Script

E tem mais um detalhe interessante que talvez possamos adicionar à nossa plataforma móvel. É comum, em muitos jogos, vermos o personagem, ao subir em uma dessas plataformas móveis, ser carregado por ela. Como será que podemos fazer isso com a nossa plataforma?

É bem simples! Basta o personagem tornar-se filho da plataforma quando eles tiverem em contato! E aí a alteração de posição da plataforma também alterará a posição do filho - o personagem. E fazer isso não é nada complicado! Basta utilizarmos os métodos de detecção de colisão. Só tem uma coisa que precisamos fazer antes, no PlayerController. Para a plataforma poder saber quando o personagem está de fato em cima dela, precisamos de algum método que possa informá-lo isso. Adicionaremos ao nosso PlayerController script o código contido na Listagem 5.

AخA
1
public bool isGrounded () {
2
        return grounded;
3
}
Listagem 5 - Método para consultar a variável grounded.
Fonte: Elaborada pelo autor.

Simples, não? Mas tem um detalhe importante! O método deve ser public, para que a plataforma tenha acesso. Feito isso, vamos ao código final da plataforma em si, visto na Listagem 6.

x
1
using System.Collections;
2
using System.Collections.Generic;
3
using UnityEngine;
4
using UnityEngine.SceneManagement;
5
6
public class MovingPlatformController : MonoBehaviour {
7
8
    private Vector3 startPosition;
9
    private Vector3 endPosition;
10
11
    public float movingDist = 20f;
12
13
    public float secs = 5f;
14
15
    // Use this for initialization
16
    void Awake () {
17
        startPosition = transform.position;
18
        endPosition = transform.position + (movingDist*Vector3.right);
19
    }
20
21
    // Update is called once per frame
22
    void FixedUpdate () {
23
        transform.position = Vector3.Lerp (startPosition, endPosition, 
24
        Mathf.SmoothStep(0f, 1f, Mathf.PingPong(Time.timeSinceLevelLoad/secs, 1f)));
25
    }
26
27
    void OnCollisionEnter2D (Collision2D col) {
28
        if (col.gameObject.CompareTag("Player")) {
29
            if (col.gameObject.GetComponent<PlayerController>().isGrounded())
30
                col.gameObject.transform.parent = transform;
31
        }    
32
    }
33
34
    void OnCollisionExit2D (Collision2D col) {
35
        if (col.gameObject.CompareTag("Player")) {
36
            col.gameObject.transform.parent = null;
37
        }    
38
    }
39
}
Listagem 6 - Código da plataforma móvel.
Fonte: Elaborada pelo autor.

Utilizamos dois dos métodos de colisão para detectar a entrada e a saída do player e, então, agir em conformidade. No método OnCollisionEnter2D, verificamos se a colisão ocorrida foi com um objeto "Player", de acordo com a Tag que definimos no início da aula. Se foi, verificamos se o Player está na plataforma, através do novo método public definido, o isGrounded. Caso esteja, dizemos que o parent do nosso player agora é a plataforma.

Quando o player sai do contato com a plataforma, detectamos isso no método OnCollisionExit2D e, então, tiramos a relação de hierarquia que havíamos criado anteriormente, deixando o player se mover livremente novamente. Vejamos o resultado desse script na Figura 12.

Figura 12 - Player movendo-se juntamente à plataforma devido à hierarquia criada.
Player movendo-se juntamente à plataforma devido à hierarquia criada.
Fonte: Captura de tela do Unity. Disponível em: https://unity3d.com/pt/ Acesso em: 04 de mar de 2017

Pronto! Com isso, temos uma plataforma móvel, na qual o player se move junto e as coisas funcionam de acordo com o código desenvolvido no script. Mas como podemos fazer isso utilizando animações?

Versão 5.3 - Todos os Direitos reservados