Как сделать так, чтобы положение по оси Y одного объекта в Unity всегда соответствовало положению по оси Y другого объекта?

Как привязать поворот по оси Y одного GameObject'а к повороту по оси Y другого GameObject'а в Unity?
  • 26 мая 2024 г. 20:51
Ответы на вопрос 2
1. Чтобы сделать так, чтобы положение по оси Y одного объекта в Unity всегда соответствовало положению по оси Y другого объекта, можно использовать скрипт, который будет обновлять позицию объекта на основе позиции другого объекта. Пример такого скрипта:
```csharp
using UnityEngine;

public class FollowYPosition : MonoBehaviour
{
    public Transform target; // объект, позиция которого будем следить

    void Update()
    {
        Vector3 newPos = transform.position;
        newPos.y = target.position.y;
        transform.position = newPos;
    }
}
```
Просто присоедините этот скрипт к объекту, который вы хотите, чтобы его Y-позиция следовала за другим объектом, и настройте переменную target, указав объект, позицию которого вы хотите отслеживать.

2. Чтобы привязать поворот по оси Y одного GameObject'а к повороту по оси Y другого GameObject'а в Unity, можно также использовать скрипт, который будет обновлять поворот объекта в соответствии с поворотом другого объекта. Пример скрипта:
```csharp
using UnityEngine;

public class FollowYRotation : MonoBehaviour
{
    public Transform target; // объект, поворот которого будем следить

    void Update()
    {
        transform.rotation = Quaternion.Euler(0, target.rotation.eulerAngles.y, 0);
    }
}
```
Присоедините этот скрипт к объекту, поворот которого вы хотите связать с другим объектом, и настройте переменную target, указав объект, поворот которого вы хотите отслеживать по оси Y.
[SerializeField] GameObject _gO1;
   [SerializeField] GameObject _gO2;

   private void Update()
   {
       GameOBJ1Rotator();     
   }
   private void LateUpdate()
   {
       _gO2.transform.rotation = Quaternion.Euler(0, GetAngle(), 0); //задаем
       Debug.Log("GO1 :" + _gO1.transform.eulerAngles.y + " GO2 :" + _gO2.transform.eulerAngles.y); // дебаг для вращения
   }
   void GameOBJ1Rotator() ///это не надо просто для наглядности, как сломать вращение
   {
       _gO1.transform.rotation *= Quaternion.Euler(Vector3.one*90f*Time.deltaTime);
   }
   float GetAngle() //получаем градусы таргет объекта
   {
       float angle = _gO1.transform.rotation.eulerAngles.y;
       return angle;
   }

Я тут специально сделал баг с захлопыванием элеров из за вращения тагрет объект по 3м осям сразу. В реальным примерах такое получить сложно, просто для наглядности и почему вращения задают кватернионами а не градусами.
Похожие вопросы