Vector3 — это структура
Часть раздела Основы скриптинга в Unity путешествия по Unity на Coddy. Урок 22 из 67.
Vector3 — это структура, разновидность типа, которую не рассматривали в курсе по C#. Структура — это значение, как и int: при присваивании копируется целиком. После Vector3 b = a; b.x = 9; значение a.x не изменится, потому что b — отдельная копия. (С классом всё иначе: две переменные могут ссылаться на один общий объект.)
transform.position — это свойство, и при чтении оно возвращает копию позиции. Поэтому transform.position.x = 0; изменило бы копию, которая тут же была бы отброшена, и C# отказывается компилировать этот код: error CS1612: Cannot modify the return value of 'Transform.position' because it is not a variable. Решение — скопировать позицию, изменить копию и присвоить её обратно. Этот бегун возвращается на среднюю дорожку при нажатии Space:
if (Input.GetKeyDown(KeyCode.Space))
{
Vector3 p = transform.position; // создать копию
p.x = 0; // изменить копию
transform.position = p; // присвоить её обратно
}Пропустите последнюю строку — код скомпилируется, но ничего не сдвинется: изменится только копия. transform.localScale и другие свойства Vector3 работают так же.
Задание
ЛегкоСани падают со скоростью fall единиц в секунду, а стрелки перемещают их вдоль оси x. Две строки должны удерживать их на полу (y не ниже 0.5) и между стенами (x от -4 до 4), но скрипт не компилируется.
Нажми Play, чтобы увидеть ошибки. Исправь две строки, работая с копией позиции и сохранив их назначение, затем нажми Check.
Попробуйте сами
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;
// Удерживайте сани на полу и между стенами.
transform.position.y = Mathf.Max(transform.position.y, 0.5f);
transform.position.x = Mathf.Clamp(transform.position.x, -4f, 4f);
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы скриптинга в Unity
1Ваш первый скрипт
Привет, UnityРазместите кубДвигайте каждый кадрПоворачивайте каждую секундуУправляйте клавишамиПовторение: управляйте кубом2Инспектор
Поля инспектораSerializeFieldЧисла с плавающей точкой и MathfАтрибуты инспектораПовторение: лифт5Преобразования и иерархия
Родители и детиМасштабПосмотри на объектыДвигайся к точкеПовторение: Луна на орбите6Игровые объекты и компоненты
Ссылки в InspectorПолучение компонентаОтсутствующие компонентыДобавление компонентаRequireComponentПоказать и скрытьПовторение: выключатель света