我有一个我想解决的问题。我有一系列游戏对象,我想将它们对齐到一个恒定的距离。我可以手动完成这个,但问题是每个对象我都给了一个事件。当我点击其中一个时,它会改变它的精灵。在某些情况下,精灵较小,然后前后物体之间的距离增加。如何在每个对象之间保持这个恒定的距离,仅在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];
}
}
}
我认为它应该在Update中,检查每个距离,如果它改变为重新绑定它或根据精灵增加它。 提前谢谢。
答案 0 :(得分:0)
我建议创建在单击对象时触发的自定义事件(https://docs.microsoft.com/en-us/dotnet/standard/events/how-to-raise-and-consume-events)。不需要每次更新都检查它,因为当我们想要进行检查时我们会得到一个触发器 最好(我认为)创建一个C#对象,该对象具有对数组中所有对象的引用,这样只要其中一个对象启动了他们的(自定义)“clicked-event”,该类就可以对它们进行排序