我是Unity平台的新手。我有一个2D游戏,其中包含10个垂直垂直排列的盒子。当框离开屏幕时,我将其位置更改为顶部框上方。因此,链条无限旋转,就像重复视差滚动背景一样。
但是我通过将框的位置与指定的float值进行比较来检查框是否会离开屏幕。我在下面分享我的代码。
void Update () {
offSet = currentSquareLine.transform.position;
currentSquareLine.transform.position = new Vector2 (0f, -2f) + offSet;
Vector2 vectorOne = currentSquareLine.transform.position;
Vector2 vectorTwo = new Vector2 (0f, -54f);
if(vectorOne.y < vectorTwo.y) {
string name = currentSquareLine.name;
int squareLineNumber = int.Parse(name.Substring (11)) ;
if(squareLineNumber < 10) {
squareLineNumber++;
} else {
squareLineNumber = 1;
}
GameObject squareLineAbove = GameObject.Find ("Square_Line" + squareLineNumber);
offSet = (Vector2) squareLineAbove.transform.position + new Vector2(0f, 1.1f);
currentSquareLine.transform.position = offSet;
}
}
如您所见,当我比较vectorOne.y和vectorTwo.y时,事情变得很丑陋。即使我在上面的代码中给出了准确的矢量值,也有一些盒子会加长,有些盒子会缩短彼此之间的距离。
我已经寻找了一个星期的解决方案,并尝试了很多代码,例如Mathf.rox,Mathf.Round,但是没有一个能够正确比较float值。如果unity从未以我期望的方式比较浮点值,那么我认为我需要改变自己的方式。
我正在等待您的忠告,谢谢!
编辑
这是我的屏幕。我有10条竖线垂直向下。
当Square_Line10离开屏幕时。我将其位置更新为Square_Line1的上方,但它们之间的距离意外增加。
好的,我找到了一种像魅力一样的解决方案。
我需要使用一个数组,并在两个循环中检查它们。第一个移动框,第二个检查框是否偏离屏幕,如下所示
public GameObject[] box;
float boundary = -5.5f;
float boxDistance = 1.1f;
float speed = -0.1f;
// Update is called once per frame
void Update () {
for (int i = 0; i < box.Length; i++) {
box[i].transform.position = box[i].transform.position + new Vector3(0, speed, 0);
}
for (int i = 0; i < box.Length; i++)
{
if(box[i].transform.position.y < boundary)
{
int topIndex = (i+1) % box.Length;
box[i].transform.position = new Vector3(box[i].transform.position.x, box[topIndex].transform.position.y + boxDistance, box[i].transform.position.z);
break;
}
}
}
我将其附加到MainCamera。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句