C# 盒子的开关位置?

C# 盒子的开关位置?,c#,unity3d,game-development,C#,Unity3d,Game Development,我从Unity开始,想从一些概念开始。基本上我想做的是:如果我点击屏幕右侧,切换蓝色和黄色框的位置,如果我随后点击屏幕右侧,切换黄色框和红色框。我已经为屏幕的左侧和右侧设置了画布。我需要做什么 [编辑]:我的错误可以在图片中看到。我不确定我是否应该使用不同的方法来解决这个问题。任何建议都将不胜感激 将其添加到按钮并设置对象引用: using UnityEngine; using UnityEngine.UI; [RequireComponent(typeof(Button))] public

我从Unity开始,想从一些概念开始。基本上我想做的是:如果我点击屏幕右侧,切换蓝色和黄色框的位置,如果我随后点击屏幕右侧,切换黄色框和红色框。我已经为屏幕的左侧和右侧设置了画布。我需要做什么

[编辑]:我的错误可以在图片中看到。我不确定我是否应该使用不同的方法来解决这个问题。任何建议都将不胜感激


将其添加到按钮并设置对象引用:

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;
    }
}

问题是,你有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;
}
}

如果你能提供一个,那就太棒了。嗨,我对使用的代码有点问题。在我附加的图像中,在第一次左键和右键单击后出现错误。错误是红色和黄色应该切换图中的第二张图片,但切换代码是比较我附加到TransformA和TransformB的两种颜色蓝色和红色框。要修复此问题,我必须对代码进行哪些更改?非常感谢:嗨,阿德里安!谢谢你的帮助!我已经实现了代码,它工作得非常好。我有一个关于交换位置和交换转换代码的问题。具体来说,两者之间的区别是什么?在这段代码中,转换是对框的引用。因此,如果交换2框的位置,则交换其引用在数组中的位置。这样,数组将准确地表示您在屏幕上看到的内容。但是交换它们的引用不会更改它们的位置,因此还需要更改每个长方体transform.position的位置