2015-12-21 2 views
0

Я пытаюсь получить фон, чтобы начать движение влево все быстрее и быстрее. Думал о том, чтобы использовать два значения: один для суммы в процентах для увеличения и одно значение для интервала между приращением, которое также увеличивалось бы больше, если бы интервал ударялся?Скорость приращения единства на основе интервала

public float interval = 1; // 1 second between intervals starting off 
public float speed = 2; // the starting speedi 

void Start() { 
    // move left 
    GetComponent<Rigidbody2D>().velocity = Vector2.left * speed; 
} 

void Update() { 
// check if interval has been reached? How? 

//if interval has been reached then (This does not work for me.. 
    GetComponent<Rigidbody2D>().velocity = GetComponent<Rigidbody2D>().velocity * 0.01f; 
    interval = interval * 2; 
} 
+0

* 0.01f делает объект медленнее и медленнее. попробуйте * 1.01 вместо него. – kagkar

+0

@Pete Ваш фон в цикле (повторяется)? –

ответ

1

Я думаю, что есть несколько вещей, которые нужно исправить здесь:

1.) вы умножая скорость на .01 каждый кадр, это будет практически заморозить его полностью. Я не уверен, что вы хотите сделать.

2.) Вы вызываете GetComponent> Rigidbody2D <() каждый кадр, что очень дорого! Вы должны создать переменную для него что-то вроде:

Rigidbody2d RB; 
void Start() { 
    RB = GetComponent<Rigidbody2D>(); 
} 

О том, как увеличить скорость после каждого интервала, я мог бы объявить счетчик, который вы увеличиваете каждый кадр. И если счетчик> интервал, то интервал * = 2 и счетчик = 0

1

Ну, прежде всего, возьмите Rigidbody2D в переменной, а затем сыграйте с ним.

Для этой цели вы можете использовать Coroutine.

public float interval = 1; // 1 second between intervals starting off 
public float speed = 2; // the starting speed 

Rigidbody2D _rb; 

void Start() { 
    // move left 
    _rb = GetComponent<Rigidbody2D>(); 
    _rb.velocity = Vector2.left * speed; 
    StartCoroutine("IncreaseSpeedWithInterval"); 
} 

void Update() { 

} 

IEnumerator IncreaseSpeedWithInterval() 
{ 
    while(true){ 
    yield return new WaitForSeconds(interval); 

    // Now either Multiply your velocity by 1.01f or Add by 0.01f 
    _rb.velocity *= 1.01f; 
    // ========== OR ========== // 
    _rb.velocity += (Vector2.one * 0.01f); 
    } 
} 
Смежные вопросы