Какова разница между методами Vector3.normalized и Vector3.Normalize()?

В документации Unity представлено всё довольно понятно, однако на практике возникают сложности. В частности, мне казалось, что метод <i>Vector3.normalized</i> предназначен только для чтения, тогда как <i>Vector3.Normalize()</i> используется для изменения значения переменной. Однако на практике оба метода, как я заметил, выполняют одну и ту же функцию. Можете, пожалуйста, помочь мне разобраться в этом?
  • 22 марта 2025 г. 20:14
Ответы на вопрос 2
В 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
Похожие вопросы