Vector3 é uma struct
Parte da seção Noções básicas de scripting no Unity do Journey de Unity da Coddy. Lição 22 de 67.
Vector3 é uma struct, um tipo que não foi abordado na jornada de C#. Uma struct é um valor, como um int: ao atribuí-la, você copia tudo. 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 a um 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 seria 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 corredor retorna à faixa do meio quando a tecla Espaço é pressionada:
if (Input.GetKeyDown(KeyCode.Space))
{
Vector3 p = transform.position; // copia
p.x = 0; // altera a cópia
transform.position = p; // atribui a cópia 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ácilO trenó cai a fall unidades por segundo, e as setas o deslizam ao longo de x. Duas linhas devem mantê-lo no chão (y nunca abaixo de 0.5) e entre as paredes (x de -4 a 4), mas o script não compila.
Pressione Play para ver os erros. Corrija as duas linhas trabalhando em uma cópia da posição, mantendo o que elas fazem, depois pressione Check.
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);
}
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Noções básicas de scripting no Unity
1Seu primeiro script
Olá, UnityPosicione o cuboMova a cada quadroGire a cada segundoConduza com as teclasRecapitulando: dirija o cubo4Vetores
Adicionando vetoresDireçõesEspaço local e espaço do mundoVelocidade diagonalDistância entre objetosVector3 é uma structRevisão: piloto de drone7Projeto: Pegue a Estrela
O ApanhadorUma Estrela Cadente10O ciclo de vida dos scripts
Awake e StartUpdate e LateUpdateOnEnable e OnDisableA ordem do ciclo de vidaRevisão: registrador do ciclo de vida5Transformações e Hierarquia
Pais e FilhosEscalaObserve as CoisasMova-se em Direção a um PontoRevisão: Lua em Órbita6GameObjects e Componentes
Referências no InspectorObter um ComponenteComponentes AusentesAdicionar um ComponenteRequireComponentMostrar e OcultarRevisão: Interruptor de Luz