Vector3 — это структура
Часть раздела Основы скриптинга в Unity путешествия по Unity на Coddy. Урок 29 из 85.
Vector3 — это структура, разновидность типа, с которой ты ещё не сталкивался. Структура — это значение, как 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 работают так же.
Задание
ЛегкоИсправь скрипт саней, чтобы он компилировался и сани оставались на полу между стенами.
- Замени две строки, задающие
transform.position.yи.x, копией:Vector3 p = transform.position;. - Задай
p.y = Mathf.Max(p.y, 0.5f);иp.x = Mathf.Clamp(p.x, -4f, 4f);, затемtransform.position = p;.
Нажми «Играть»: сани приземлятся на пол, а стены остановят их. Затем нажми «Проверить».
Попробуйте сами
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Основы C# в Unity
Привет, UnityПеременныеДля дробных чисел нужна fТекст в консолиПеременные, которые запоминаютЕсли и иначеСравнение чиселПовторение: сборщик монет7Циклы и методы
Повторение с forЦиклы внутри цикловНапишите методМетоды, которые возвращают значениеМассивыПовторение: лестница10Поиск объектов
Поиск по имениТегиПоиск по типуСсылки лучше поискаNull в UnityПовторение: ближайшая монета13Проект: уворачиваемся от блоков
БегунБлоки с неба2Заставь двигаться
Размести кубДвигай каждый кадрПоворачивай каждую секундуУправляй клавишамиПовторение: веди куб5Векторы
Сложение векторовНаправленияЛокальное и мировое пространствоСкорость по диагоналиРасстояние между объектамиVector3 — это структураПовторение: пилот дрона8Игровые объекты и компоненты
Ссылки в InspectorПолучение компонентаОтсутствующие компонентыДобавление компонентаRequireComponentПоказ и скрытиеПовторение: выключатель светаПотренируйтесь самостоятельно: Песочница Unity