2015-03-06 1 views
1

Я некоторое время боролся за этот код. У меня есть метод для моего плеера, который, когда он собирает определенное количество предметов коллекционирования, идет быстрее. Но я хочу, чтобы мой проигрыватель работал быстрее в течение определенного времени (например, 3 секунды). И счетчик (для коллекционеров) должен вернуться к нулю, поэтому, когда игрок снова собирает определенное количество предметов коллекционирования, он снова идет быстрее и т. Д.Как сделать метод работы за определенный промежуток времени в C# Unity

У меня есть класс для всех моих PowerUp и другого класса: Speder, которые наследуются от PowerUp. Переменная скорости, которая поднимается, когда она собирает определенное количество предметов коллекционирования, находится в моем скрипте игроков: Player0.

PowerUp

using UnityEngine; 
using System.Collections; 

public class PowerUp : MonoBehaviour 
{ 
    public static int counter = 0; 

    void OnTriggerEnter2D(Collider2D other) 
    { 
    if (other.tag == "Player") 
    { 
     Speder.BoostThaSpeed(); 
     Destroy(this.gameObject); 
     counter++; 

     if (counter == 3) 
     { 
     counter = 0; 
     } 
    } 
    } 
} 

Speder

using UnityEngine; 
using System.Collections; 

public class Speder : PowerUp 
{ 
    public static void BoostThaSpeed() 
    { 
    if (counter == 2) 
    { 
     Player0.speed = Player0.speed * 2; 
    } 

    else if (counter < 2) 
    { 
     Player0.speed = Player0.speed = 3.5f; 
    } 
    } 
    void OnGUI() 
    { 
    GUI.Box(new Rect(750, 0, 130, 20), "Counter:" + counter); 
    } 
} 

Player0

using UnityEngine; 
using System.Collections; 

public class Player0 : MonoBehaviour 
{ 

    // SPEEDVARIABLES 
    public static float speed = 3.5f; 

void Update() 
    { 
// MOVING CODE 

    if (Input.GetKey(KeyCode.LeftArrow)) 
    { 
     rigidbody2D.velocity = new Vector2(-speed, rigidbody2D.velocity.y); // - speedForce (om naar links te gaan) 
     transform.localScale = new Vector3(-0.3f, 0.3f, 0.3f); 
    } 

    else if (Input.GetKey(KeyCode.RightArrow)) 
    { 
     rigidbody2D.velocity = new Vector2(speed, rigidbody2D.velocity.y); // + speedforce (om naar rechts te gaan) 
     transform.localScale = new Vector3(0.3f, 0.3f, 0.3f); 
    } 

    else 
    { 
    rigidbody2D.velocity = new Vector2(0, rigidbody2D.velocity.y); 
    } 
} 

ответ

1

вы можете использовать Time.deltaTime в своих методах обновления, чтобы уменьшить переменную

добавить SpeedBoost TimeRemaining свойства Speder и установить его в любой момент, скажем, 10 в методе BoostThaSpeed ​​

затем добавить метод обновления для Speder и положить

if(SpeedboostTimeRemaining > 0) 
{ 
    SpeedboostTimeRemaining -= Time.deltaTime 
    if(SpeedboostTimeRemaining < 0) 
    { 
     SpeedboostTimeRemaining = 0; 
     Player0.speed = 3.5f; 
    } 
} 
+0

хотя, я думаю, что вам нужно реорганизовать, чтобы уменьшить использование глобальных объекты – Ewan

+0

Ты сделал мой день сэр! Спасибо огромное! –

Смежные вопросы