unity2d:在循环后随机改变游戏对象的位置

时间:2017-08-26 15:08:23

标签: c# loops unity3d random

所以,我正在制作这个小游戏,角色不断向上移动,使用自动滚动摄像头。角色从平台跳到平台,一旦平台或背景图块不再可见,我就会将其循环回来。我为我的平台分配了一个范围,其中随机发生器从中选择一个值,以便玩家每次开始游戏时获得一组单独的平台。问题是循环:因为我在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;
    }
}

1 个答案:

答案 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();
    }
}