GameObjects Array对齐

时间:2018-04-19 10:11:08

标签: c# unity3d

我有一个我想解决的问题。我有一系列游戏对象,我想将它们对齐到一个恒定的距离。我可以手动完成这个,但问题是每个对象我都给了一个事件。当我点击其中一个时,它会改变它的精灵。在某些情况下,精灵较小,然后前后物体之间的距离增加。如何在每个对象之间保持这个恒定的距离,仅在x轴上。下面是更改精灵的事件,我手动尝试为每个对象移动它。对象排成一行。

 private void DetectBadWord(GameObject target, MouseEventType type)
{
    if (type == MouseEventType.CLICK && canClick)
    {
        int targetIndex = System.Array.IndexOf(goodWordsSequence, target);

        if (badWordsToList.Contains(targetIndex))
        {
            Debug.Log("Good Click");
            Asked++;
            //sManager.Play(goodFXClip);
            if (sentence.index == 0 && targetIndex == 1)
            {
                Vector3 cPos = new Vector3(goodWordsSequence[targetIndex].transform.position.x + 0.1f, goodWordsSequence[targetIndex].transform.position.y);
                goodWordsSequence[targetIndex].transform.position = cPos;
            }
            if (sentence.index == 3 && (targetIndex == 2 || targetIndex == 4))
            {
                Vector3 cPos = new Vector3(goodWordsSequence[targetIndex].transform.position.x, goodWordsSequence[targetIndex].transform.position.y - 0.03f);
                goodWordsSequence[targetIndex].transform.position = cPos;
            }
            Instantiate(goodEffect, goodWordsSequence[targetIndex].transform.position, Quaternion.identity);
            goodWordsSequence[targetIndex].GetComponent<BoxCollider2D>().enabled = false;
            goodWordsSequence[targetIndex].GetComponent<SpriteRenderer>().DOFade(1f, 0f);
            goodWordsSequence[targetIndex].GetComponent<SpriteRenderer>().sprite = goodWords[targetIndex];
        } 
    }
}

Example img

我认为它应该在Update中,检查每个距离,如果它改变为重新绑定它或根据精灵增加它。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

我建议创建在单击对象时触发的自定义事件(https://docs.microsoft.com/en-us/dotnet/standard/events/how-to-raise-and-consume-events)。不需要每次更新都检查它,因为当我们想要进行检查时我们会得到一个触发器 最好(我认为)创建一个C#对象,该对象具有对数组中所有对象的引用,这样只要其中一个对象启动了他们的(自定义)“clicked-event”,该类就可以对它们进行排序