Страница 1 из 1

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

СообщениеДобавлено: 06 апр 2023, 16:41
kapibara47
У меня игра лабиринт от первого лица. Хочу чтобы лампочку, которая является дочерним объектом камеры, можно было перемещать из левой руки в правую по 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;
                }
        }
}
 

Не знаю, как изменять координаты объекта как дочернего.(

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

СообщениеДобавлено: 06 апр 2023, 18:37
samana
Если у вас нет на камере рук, то просто создайте у неё два пустых дочерних объекта слева и справа, которые будут символизировать позицию этих рук.
Затем в инспекторе скрипта заполните все поля, перетащив оба 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;
        }
    }


}
 

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

СообщениеДобавлено: 15 апр 2023, 19:37
kapibara47
Samana, спасибо огромное, но чё-то ответ затянулся, поэтому щас делать уже лень... Но всё равно спасибо!

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

СообщениеДобавлено: 15 апр 2023, 20:50
1max1
но чё-то ответ затянулся

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

ор выше гор