【问题标题】:Switching positions of boxes?交换盒子的位置?
【发布时间】:2018-06-04 13:48:48
【问题描述】:

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

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

Switching positions of boxes error

【问题讨论】:

标签: c# unity3d game-development


【解决方案1】:

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

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

【讨论】:

  • 您好,我对所使用的代码有疑问。在我附加的图像中,第一次左右单击后出现错误。错误是红色和黄色应该已经切换(图中的第二张图片),但切换代码是比较我附加到 TransformA 和 TransformB 的两种颜色(蓝色和红色框起来的)。我必须对代码进行哪些更改才能解决此问题?非常感谢:)
【解决方案2】:

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

【讨论】:

  • 嗨阿德里安!谢谢你的帮助!我已经实现了代码,并且运行良好。我对交换位置和交换转换代码有疑问。具体来说,两者有什么区别?
  • 转换在这段代码中是对盒子的引用。因此,如果您交换 2 个框的位置,请交换它们在数组中的引用位置。这样,数组将准确地代表您在屏幕上看到的内容。但是交换它们的引用不会改变它们的位置,所以你还需要改变每个框的位置(transform.position)
猜你喜欢
  • 2014-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
相关资源
最近更新 更多