Vector3 é uma struct
Parte da seção Fundamentos de Scripting no Unity do Journey de Unity da Coddy. Lição 29 de 85.
Vector3 é uma struct, um tipo que você ainda não conheceu. Uma struct é um valor, como um int: atribuí-la copia o valor inteiro. Depois de Vector3 b = a; b.x = 9;, a.x permanece inalterado, porque b é uma cópia separada. (Uma classe funciona de outra forma: duas variáveis podem se referir ao mesmo objeto compartilhado.)
transform.position é uma propriedade, e lê-la fornece uma cópia da posição. Portanto, transform.position.x = 0; alteraria uma cópia que é descartada imediatamente, e o C# se recusa a compilá-la: error CS1612: Cannot modify the return value of 'Transform.position' because it is not a variable. A solução é copiar a posição, alterar a cópia e atribuí-la de volta. Este personagem retorna à faixa do meio quando a tecla Espaço é pressionada:
if (Input.GetKeyDown(KeyCode.Space))
{
Vector3 p = transform.position; // copie
p.x = 0; // altere a cópia
transform.position = p; // atribua-a de volta
}Se você omitir a última linha, o código compila, mas nada se move: apenas a cópia foi alterada. transform.localScale e as outras propriedades Vector3 funcionam da mesma maneira.
Desafio
FácilFaça o script do trenó compilar para que ele permaneça no chão e entre as paredes.
- Substitua as duas linhas que definem
transform.position.ye.xpor uma cópia:Vector3 p = transform.position;. - Defina
p.y = Mathf.Max(p.y, 0.5f);ep.x = Mathf.Clamp(p.x, -4f, 4f);, depoistransform.position = p;.
Pressione “Jogar”: o trenó pousa no chão e as paredes o impedem de passar. Depois, pressione “Verificar”.
Experimente você mesmo
using UnityEngine;
public class Sled : MonoBehaviour
{
public float speed = 4f;
public float fall = 3f;
void Update()
{
float h = Input.GetAxisRaw("Horizontal");
transform.position += new Vector3(h * speed, -fall, 0) * Time.deltaTime;
// Mantenha o trenó no chão e entre as paredes.
transform.position.y = Mathf.Max(transform.position.y, 0.5f);
transform.position.x = Mathf.Clamp(transform.position.x, -4f, 4f);
}
}
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