如何在c#中对方法设置时间限制

时间:2015-02-26 17:56:12

标签: c# unity3d

我希望我的播放器能够提速几秒钟。当它收集4个项目(paintCount = 4)时,玩家会在短时间内获得移动速度提升。 这段时间我如何编码我的播放器移动得更快?

我正在使用c#和Unity。

using UnityEngine;
using System.Collections;

public class PowerUp : MonoBehaviour
{
  void OnTriggerEnter2D(Collider2D other)
  {
    if (other.tag == "Player")
    {
      Paintser.SpeedUp();
      Destroy(this.gameObject);
      Paintser.paintCount++;
    }
  }
}



using UnityEngine;
using System.Collections;

public class Paintser : PowerUp
{

  public static int paintCount = 0;
  public int speedBoostTime = 3;

  public static void SpeedUp()
  {
    if (paintCount == 4)
    {

      SimplePlayer0.speed = SimplePlayer0.speed * 2;

      Paintser.paintCount = Paintser.paintCount = 0;

    }
  }
}

2 个答案:

答案 0 :(得分:2)

using UnityEngine;
using System.Collections;

public class Paintser : PowerUp
{
  public float normalSpeed = 10;
  public static int paintCount = 0;
  public int speedBoostTime = 3;

  public static void SpeedUp(){

      SimplePlayer0.speed = SimplePlayer0.speed * 2;
      Paintser.paintCount = Paintser.paintCount = 0;
      StartCoroutine(duringBoost(speedBoostTime, normalSpeed));
    }

    private static IEnumerator duringBoost(int duration, int newSpeed){
       yield return new WaitForSeconds(duration);
       SimplePlayer0.speed = newSpeed;
     }

  }
}

答案 1 :(得分:1)

一般的想法应该是:

将其添加到SimplePlayer0的脚本中:

float speedBoostTime = 0;

void SpeedUp()
{
    speed *= 2;
    speedBoostTime = 3; // seconds
}

void Update()
{
    while ( speedBoostTime > 0 )
    {
        speedBoostTime -= Time.deltaTime;
        if ( speedBoostTime <= 0 ) speed /= 2;
    }
}

并以这种方式修改您的代码:

public class Paintser : PowerUp
{

  public static int paintCount = 0;
  public int speedBoostTime = 3;

  public static void SpeedUp()
  {
    if (paintCount == 4)
    {

      SimplePlayer0.SpeedUp();

      Paintser.paintCount = Paintser.paintCount = 0;

    }
  }
}