Как сделать смену левша правша через Toggle?

Программирование на Юнити.

Как сделать смену левша правша через Toggle?

Сообщение kapibara47 06 апр 2023, 16:41

У меня игра лабиринт от первого лица. Хочу чтобы лампочку, которая является дочерним объектом камеры, можно было перемещать из левой руки в правую по Toggle. Toggle уже настроен, надо только менять по нему лампочку из руки в руку. Вот код:
Синтаксис:
Используется csharp
public class CameraScript : MonoBehaviour {
        public Toggle LeftToggle, RightToggle;
        public Transform lamp;
        private bool forward;

        void Update() {
                if (LeftToggle.isOn && !forward) {
                        lamp.position = new Vector3 (-0.4726f, -0.2515f, 0.3682f);
                        forward = true;
                } else if (RightToggle.isOn && forward) {
                        lamp.position = transform.TransformDirection(new Vector3 (0.443f, -0.2515f, 0.3682f));
                        forward = false;
                }
        }
}
 

Не знаю, как изменять координаты объекта как дочернего.(
kapibara47
UNец
 
Сообщения: 7
Зарегистрирован: 02 апр 2023, 11:32

Re: Как сделать смену левша правша через Toggle?

Сообщение samana 06 апр 2023, 18:37

Если у вас нет на камере рук, то просто создайте у неё два пустых дочерних объекта слева и справа, которые будут символизировать позицию этих рук.
Затем в инспекторе скрипта заполните все поля, перетащив оба Toogle и пустые-руки-объекты созданные в предыдущем шаге, ну и саму лампу.
Внутри скрипта автоматически создаётся группа для обеих Toggle, чтобы при включении одного - автоматически выключался другой (это удобно).
И не нужно что-то проверять в Update, ведь достаточно просто подписаться на события изменения Toggle и уже выполнять все нужные действия.

Здесь при изменении Toogle, лампа просто меняет родителя. Изначально лампа в левой руке, но вы можете это изменить легко в коде.

Синтаксис:
Используется csharp
using UnityEngine;
using UnityEngine.UI;

public class CameraScript : MonoBehaviour
{
    public Toggle LeftToggle;
    public Toggle RightToggle;
    [Space]
    public Transform LeftHandPoint;
    public Transform RightHandPoint;
    [Space]
    public Transform Lamp;

    private ToggleGroup _toggleGroup;
    void Start()
    {
        _toggleGroup = gameObject.AddComponent<ToggleGroup>();

        LeftToggle.group = _toggleGroup;
        RightToggle.group = _toggleGroup;

        LeftToggle.onValueChanged.AddListener(ToggleChanged);
        RightToggle.onValueChanged.AddListener(ToggleChanged);

        Lamp.position = Vector3.zero;  
        LeftToggle.isOn = true;
    }

    private void ToggleChanged(bool flag)
    {
        if (LeftToggle.isOn)
        {
            Lamp.SetParent(LeftHandPoint, worldPositionStays: false);
            return;
        }

        if (RightToggle.isOn)
        {
            Lamp.SetParent(RightHandPoint, worldPositionStays: false);
            return;
        }
    }


}
 
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Как сделать смену левша правша через Toggle?

Сообщение kapibara47 15 апр 2023, 19:37

Samana, спасибо огромное, но чё-то ответ затянулся, поэтому щас делать уже лень... Но всё равно спасибо!
kapibara47
UNец
 
Сообщения: 7
Зарегистрирован: 02 апр 2023, 11:32

Re: Как сделать смену левша правша через Toggle?

Сообщение 1max1 15 апр 2023, 20:50

но чё-то ответ затянулся

kapibara47 06 апр 2023 16:41
samana 06 апр 2023 18:37

ор выше гор
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5