Переключение позиций ящиков? - PullRequest
0 голосов
/ 04 июня 2018

Я начинаю с Unity и хочу начать с некоторых концепций для работы.По сути, я хочу сделать следующее: если я нажму на правой стороне экрана, поменяю местами синие и желтые прямоугольники, и если я впоследствии нажму на правой стороне экрана, поменяю желтую коробку с красной рамкой.Я уже настроил холст для левой и правой стороны экрана.Что мне нужно для этого сделать?

[РЕДАКТИРОВАТЬ]: ошибка, которую я имею, можно увидеть на картинке.Я не уверен, должен ли я использовать другой подход для решения этой проблемы.Любой совет будет принята с благодарностью!

Ошибка переключения положения ящиков

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Проблема в том, что у вас есть 3 коробки, которые меняются местами, а не только две.После первого обмена поменяйте порядок.Вы должны сделать что-то вроде этого:

using UnityEngine;
using UnityEngine.UI;

[RequireComponent(typeof(Button))]
public class SwapObjectPositions : MonoBehaviour
{
public Transform[] boxTransform;
public Button LeftButton;
public Button RightButton;

void Start()
{
    if (LeftButton == null || RightButton == null)
    {
        Debug.Log("Button reference missing");
    }
    LeftButton.onClick.AddListener(LeftSwap);
    RightButton.onClick.AddListener(RightSwap);
    if (boxTransform.Length != 3 || boxTransform[0] == null || boxTransform[1] == null || boxTransform[2] == null)
    {
        Debug.Log("Boxes reference missing");
    }
}

public void LeftSwap()
{
    // Swap Positions
    Vector3 tempPosition = boxTransform[0].position;
    boxTransform[0].position = boxTransform[1].position;
    boxTransform[1].position = tempPosition;
    // Swap Transform
    Transform tempTransform = boxTransform[0];
    boxTransform[0] = boxTransform[1];
    boxTransform[1] = tempTransform;
}

public void RightSwap()
{
    // Swap Positions
    Vector3 tempPosition = boxTransform[1].position;
    boxTransform[1].position = boxTransform[2].position;
    boxTransform[2].position = tempPosition;
    // Swap Transform
    Transform tempTransform = boxTransform[1];
    boxTransform[1] = boxTransform[2];
    boxTransform[2] = tempTransform;
}
}
0 голосов
/ 04 июня 2018

Добавьте это к кнопке и установите ссылки на объекты:

using UnityEngine;
using UnityEngine.UI;

[RequireComponent(typeof(Button))]
public class SwapObjectPositions : MonoBehaviour {

public Transform transformA;
public Transform transformB;

    void Start () {
        GetComponent<Button>().onClick.AddListener(SwapPositions);
    }

    public void SwapPositions()
    {
        if (transformA==null || transformB==null) 
        {
            Debug.Log("Set object references in the inspector please"); 
            return;
        }
        Vector3 posA=transformA.position;
        transformA.position=transformB.position;
        transformB.position=posA;
    }
}
...