Os materiais didáticos aqui disponibilizados estão licenciados através de Creative Commons Atribuição-SemDerivações-SemDerivados CC BY-NC-ND. Você possui a permissão para visualizar e compartilhar, desde que atribua os créditos do autor. Não poderá alterá-los e nem utilizá-los para fins comerciais.
Atribuição-SemDerivações-SemDerivados
CC BY-NC-ND
Cursos / Jogos Digitais / Desenvolvimento com Motores de Jogos I / Aula
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.
public bool isGrounded () {
return grounded;
}
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.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class MovingPlatformController : MonoBehaviour {
private Vector3 startPosition;
private Vector3 endPosition;
public float movingDist = 20f;
public float secs = 5f;
// Use this for initialization
void Awake () {
startPosition = transform.position;
endPosition = transform.position + (movingDist*Vector3.right);
}
// Update is called once per frame
void FixedUpdate () {
transform.position = Vector3.Lerp (startPosition, endPosition,
Mathf.SmoothStep(0f, 1f, Mathf.PingPong(Time.timeSinceLevelLoad/secs, 1f)));
}
void OnCollisionEnter2D (Collision2D col) {
if (col.gameObject.CompareTag("Player")) {
if (col.gameObject.GetComponent<PlayerController>().isGrounded())
col.gameObject.transform.parent = transform;
}
}
void OnCollisionExit2D (Collision2D col) {
if (col.gameObject.CompareTag("Player")) {
col.gameObject.transform.parent = null;
}
}
}
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.
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