В документации Unity представлено всё довольно понятно, однако на практике возникают сложности. В частности, мне казалось, что метод <i>Vector3.normalized</i> предназначен только для чтения, тогда как <i>Vector3.Normalize()</i> используется для изменения значения переменной. Однако на практике оба метода, как я заметил, выполняют одну и ту же функцию. Можете, пожалуйста, помочь мне разобраться в этом?
В Unity `Vector3.normalized` и `Vector3.Normalize()` действительно имеют разные подходы к нормализации векторов, и их использование может вызывать путаницу.
1. **`Vector3.normalized`**:
- Это свойство, которое возвращает новый вектор, нормализованный вариант исходного вектора. Исходный вектор при этом не изменяется.
- Например:
```csharp
Vector3 original = new Vector3(3, 4, 0);
Vector3 normalized = original.normalized; // normalized будет (0.6, 0.8, 0)
// original остается (3, 4, 0).
```
2. **`Vector3.Normalize()`**:
- Это метод, который нормализует сам вектор, на котором он был вызван. Таким образом, метод изменяет сам объект, на котором вы его вызываете.
- Например:
```csharp
Vector3 original = new Vector3(3, 4, 0);
original.Normalize(); // original теперь (0.6, 0.8, 0)
```
Таким образом, основное различие между ними заключается в следующем:
- `Vector3.normalized` **не изменяет** исходный вектор и возвращает **новый нормализованный вектор**.
- `Vector3.Normalize()` **изменяет** текущий вектор, который вызывает метод, и делает его нормализованным.
Это различие может быть важно в зависимости от контекста вашего кода и того, хотите ли вы сохранить исходные данные или нет.
Когда используешь Vector3.normalized это значение не меняется а Vector3.Normalize() перезаписывает
условно Vector3.Normalize() это
thisv3 = Normalize(thisv3); Vector3 Normalize(Vector3 v3) { return v3.normalized; }
как пример что бы разобраться
[SerializeField]Vector3 _normalized; [SerializeField]Vector3 _normal; [SerializeField]Vector3 _newVector1; [SerializeField] Vector3 _newVector2; private void Update() { _normalized.Set(Input.GetAxis("Vertical"), 0, Input.GetAxis("Horizontal")); _normal.Set(Input.GetAxis("Vertical"), 0, Input.GetAxis("Horizontal")); _newVector1 = _normalized.normalized; _normal.Normalize(); _newVector2 = _normal; }
а надо это , допустим дальше вектор идет контроллер анимации а там в бленде не 0.7,07 а 1,1