Создание Vector3 с передачей одного параметра

Возможна ли инициализация Vector3 с указанием одного параметра этого же типа, чтобы не писать подобных конструкций:

vec = new Vector3(transform.position.x, transform.position.y, transform.position.z);

Ответы (2 шт):

Автор решения: Максим Фисман

Переменные могут передаваться по ссылке, либо нет - по значению. Переменная типа данных float передается по значению, то есть при таком коде:

float a = 5.1f;
float b = a;
a = 6.2f;

Переменная b так и останется равна 5.1.

Vector3 (и Vector2, и Vector2Int, и Vector3Int...) является, грубо говоря, набором из 2/3/... чисел типа int/float. Таким образом при таком коде:

Vector3 a = new Vector3(1,1,1);
Vector3 b = a; // Можно указать new Vector3(a.x, a.y, a.z), но это сумасшествие
a = new Vector3(2,2,2);

Переменная b так и останется равной new Vector3(1,1,1)

→ Ссылка
Автор решения: Yaroslav

Vector3 это структура (struct).

введите сюда описание изображения

Структура ведёт себя как базовые типы (int, float, bool, string и т.д.).

new Vector3() похоже на конструктор класса, лишь потому, что так удобно указать поля одной строчкой, а не множеством.

Vector3 MyVector;
MyVector.x = 1; // не удобно
MyVector.y = 2; // явно трешак
MyVector.z = 3; // но с структурами можно и так

Структура хоть и обладает методами, но это не класс и ему не нужен конструктор.

Как и базовые типы, структура не ссылочный тип.

int MyIntA = 3;
int MyIntB = MyIntA; // не ссылается, а копирует
Vector3 MyVectorA = new Vector3(1, 2, 3); // не инициализирует, а копирует
Vector3 MyVectorB = MyVectorA; // не ссылается, а копирует
Vector3 MyVectorC = transform.position; // не ссылается, а копирует

Как и базовые типы, структуры могут обрабатывать математические и логические операторы (перегрузка операторов), в чём их фишка.

Vector3 MyVectorD = MyVectorA+MyVectorB;
Vector3 MyVectorE = MyVectorC*2f;
Vector3 MyVectorF = new Vector3(1, 2, 3)-new Vector3(3, 2, 1);
Vector3 MyVectorG = transform.position*0.5f+new Vector3(0, 2, 0);
if (MyVectorA > MyVectorB)
// Vector3 не обрабатывают логические сравнения > и <, но структуры так могут уметь в отличае от классов
→ Ссылка