所以,我正在制作这个小游戏,角色不断向上移动,使用自动滚动摄像头。角色从平台跳到平台,一旦平台或背景图块不再可见,我就会将其循环回来。我为我的平台分配了一个范围,其中随机发生器从中选择一个值,以便玩家每次开始游戏时获得一组单独的平台。问题是循环:因为我在start()函数中进行随机化,所以平台的随机选择只分配一次然后循环并一次又一次地循环。所以游戏在几次循环之后变得有点无聊,就像在20秒之后:D
这是我的代码:
private float randomFloat = 0;
private int subOrAdd = 0;
// Use this for initialization
void Start () {
subOrAdd = Random.Range(1, 10);
randomFloat = Random.Range(0f, 1.4f);
// randomly add or subtract height of object
if (subOrAdd < 6)
{
this.transform.position = new Vector2(transform.position.x, transform.position.y - randomFloat);
}
else if (subOrAdd >= 6)
{
this.transform.position = new Vector2(transform.position.x, transform.position.y + randomFloat);
}
}
基本上,我有一个硬编码范围,然后随机决定添加或减去该范围外的数字。那么我怎么能这样做,那些得到循环的物体总是要求新的位置?因为启动只会在您知道的情况下调用一次,甚至在循环之后,位置保持不变。我希望我在这里明确表示:)
任何帮助都会很棒!
以下是循环平台的代码:
public class PlattformLooper : MonoBehaviour {
public float spacingBetweenLoops = 0f;
private void OnTriggerEnter2D(Collider2D collider)
{
if (collider.gameObject.tag == "Plattform")
{
Debug.Log("TRIGGERED Plattform!");
float heightOfBGObj = ((BoxCollider2D)collider).size.y;
Vector3 pos = collider.transform.position;
pos.y += heightOfBGObj * (5*5)+spacingBetweenLoops;
collider.transform.position = pos;
}
}
答案 0 :(得分:3)
只需将随机化逻辑提取到单独的方法中即可。
void Start () {
RandomizeHeight()
}
public void RandomizeHeight() {
subOrAdd = Random.Range(1, 10);
randomFloat = Random.Range(0f, 1.4f);
// randomly add or subtract height of object
if (subOrAdd < 6)
{
this.transform.position = new Vector2(transform.position.x, transform.position.y - randomFloat);
}
else if (subOrAdd >= 6)
{
this.transform.position = new Vector2(transform.position.x, transform.position.y + randomFloat);
}
}
然后你可以随时调用它:
public class PlattformLooper : MonoBehaviour {
public float spacingBetweenLoops = 0f;
private void OnTriggerEnter2D(Collider2D collider)
{
if (collider.gameObject.tag == "Plattform")
{
Debug.Log("TRIGGERED Plattform!");
float heightOfBGObj = ((BoxCollider2D)collider).size.y;
Vector3 pos = collider.transform.position;
pos.y += heightOfBGObj * (5*5)+spacingBetweenLoops;
collider.transform.position = pos;
collider.GetComponent<YourComponent>().RandomizeHeight();
}
}