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

Как можно перемещать объект в позицию, на которую указывает рэй каст, при нажатии левой кнопки мыши?
  • 21 февраля 2025 г. 8:44
Ответы на вопрос 2
В Unity есть несколько способов реализовать указанные вами функции. Давайте разберём их по отдельности.

### 1. Сделать объект дочерним и переместить в нулевую позицию

Для того чтобы сделать объект дочерним другому объекту и переместить его в локальную нулевую позицию при нажатии кнопки, вы можете использовать следующий код на C#.

Создайте новый скрипт, например `MakeChildOnKeyPress`, и добавьте его к объекту, который будет управлять этой функциональностью.

```csharp
using UnityEngine;

public class MakeChildOnKeyPress : MonoBehaviour
{
    public GameObject objectToMakeChild; // объект, который будет дочерним
    public Transform parentObject; // объект, к которому будет привязан дочерний объект

    void Update()
    {
        // Проверяем нажатие клавиши (например, пробела)
        if (Input.GetKeyDown(KeyCode.Space))
        {
            if (objectToMakeChild != null && parentObject != null)
            {
                // Делаем объект дочерним
                objectToMakeChild.transform.SetParent(parentObject);
                // Перемещаем его в локальную нулевую позицию
                objectToMakeChild.transform.localPosition = Vector3.zero;
            }
        }
    }
}
```

### 2. Перемещать объект по рэй касту при нажатии левой кнопки мыши

Для того чтобы перемещать объект в позицию, на которую указывает рэй каст, вам нужно использовать метод `Physics.Raycast`. Вот пример того, как это можно реализовать:

Создайте еще один скрипт, например, `MoveObjectOnClick`:

```csharp
using UnityEngine;

public class MoveObjectOnClick : MonoBehaviour
{
    public GameObject objectToMove; // объект, который будет перемещаться

    void Update()
    {
        // Проверяем, нажата ли левая кнопка мыши
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;

            // Проверяем, попал ли рэйкаст во что-то
            if (Physics.Raycast(ray, out hit))
            {
                // Перемещаем объект в позицию удара
                objectToMove.transform.position = hit.point;
            }
        }
    }
}
```

### Как использовать скрипты

1. Создайте пустой объект в сцене и прикрепите к нему `MakeChildOnKeyPress`. Установите в инспекторе `objectToMakeChild` и `parentObject`.
2. Создайте объект (например, куб) и прикрепите к нему `MoveObjectOnClick`. Установите в инспекторе `objectToMove`.

Теперь при нажатии пробела дочерний объект будет привязываться к указанному родительскому объекту и перемещаться в нулевую позицию. А при нажатии на левую кнопку мыши объект будет перемещаться в ту точку, куда вы кликнули.
дочерний 
https://docs.unity3d.com/ru/current/ScriptReferenc...
перемещение в 0 это относительно родительского объекта ? есть локальные координаты объекта
https://docs.unity3d.com/ru/current/ScriptReferenc...
Похожие вопросы