Mover-se em direção a um ponto
Parte da seção Fundamentos de Scripting no Unity do Journey de Unity da Coddy. Lição 35 de 85.
Vector3.MoveTowards(current, target, maxStep) retorna um ponto até maxStep mais próximo de target. Quando o alvo está mais perto do que isso, retorna o próprio alvo, então nunca ultrapassa o destino. Usando speed * Time.deltaTime como passo, um objeto se desloca a uma velocidade constante e para exatamente no alvo. Este teleférico desliza até sua estação a 2 unidades por segundo:
public Vector3 station = new Vector3(6, 3, 0);
public float speed = 2f;
void Update()
{
transform.position = Vector3.MoveTowards(transform.position, station, speed * Time.deltaTime);
}Assim que chega, todas as chamadas seguintes retornam station novamente, então o teleférico fica parado, e transform.position == station é verdadeiro. Para um único número, Mathf.MoveTowards funciona da mesma maneira.
Vector3.Lerp(a, b, t) é o ponto que fica a uma fração t do caminho de a até b: com t = 0.5, fica na metade do caminho. Escrito como Lerp(transform.position, station, 2f * Time.deltaTime) em Update(), ele percorre uma parte da distância restante a cada quadro: rápido no início, cada vez mais devagar perto do fim, aproximando-se aos poucos em vez de chegar a uma velocidade definida. Use MoveTowards quando um objeto precisar se deslocar a uma velocidade definida e parar exatamente; use esse padrão com Lerp para uma desaceleração suave.
Desafio
MédioFaça o drone voar até a plataforma de pouso quando a tecla Space for pressionada.
- Adicione os campos
bool flying;ebool landed;. Ao executarInput.GetKeyDown(KeyCode.Space), definaflying = true;. - Enquanto
flying && !landed, mova-o comVector3.MoveTowards(transform.position, pad, speed * Time.deltaTime). - Quando
transform.position == pad, definalandede registreLanded.
Pressione “Jogar” e, em seguida, Space: o drone pousa na plataforma. Depois, pressione “Verificar”.
Experimente você mesmo
using UnityEngine;
public class Drone : MonoBehaviour
{
public Vector3 pad = new Vector3(0, 0.25f, 0);
public float speed = 2f;
void Update()
{
// Após Space: voe até pad na velocidade speed e registre Landed uma vez ao chegar
}
}
Todas as lições de Fundamentos de Scripting no Unity
1Fundamentos de C# no Unity
Olá, UnityVariáveisDecimais precisam de um fTexto no ConsoleVariáveis que guardam valoresIf e ElseComparar númerosRevisão: Coletor de Moedas7Laços e Métodos
Repita com forLaços dentro de laçosEscreva um métodoMétodos que respondemArraysRevisão: Escada10Encontrando coisas
Buscar pelo nomeTagsBuscar por tipoReferências são melhores que FindO null do UnityRevisão: moeda mais próxima13Projeto: Desvie dos Blocos
O CorredorBlocos do Céu2Faça-o se mover
Posicione o cuboMova a cada quadroGire a cada segundoDirija com as teclasRecapitulando: dirija o cubo5Vetores
Somando vetoresDireçõesEspaço local e globalVelocidade diagonalDistância entre objetosVector3 é uma structRevisão: piloto de drone8GameObjects e Componentes
Referências no InspectorObter um componenteComponentes ausentesAdicionar um componenteRequireComponentMostrar e ocultarRevisão: Interruptor de luz6Transformações e hierarquia
Pais e filhosIçar a bandeiraEscalaOlhar para as coisasMover-se em direção a um pontoRevisão: Lua em órbita9Projeto: Pegue a Estrela
O PegadorUma Estrela CadentePratique por conta própria: Playground de Unity