【问题标题】:Accelerate ball over time随着时间的推移加速球
【发布时间】:2016-02-07 21:20:32
【问题描述】:

我有一个球需要在一段时间内加速,但用力很小。我试图用 Time.deltatime 除以特定值来加速,但它不起作用。

这是我的代码示例(要开始游戏,您需要单击一下,球以恒定速度移动),我的问题是如何在一段时间内自动加速球。

void Start () 
{   
    Application.targetFrameRate = 60;
    gameStart = false;

}

void Update ()
{
    if (!gameStart) 
    {
        if (Input.touchCount >= 1) 
        {
            gameStart = true;
            GetComponent<Rigidbody2D> ().AddForce (new Vector2 (1f, 0.5f) * force);


        }
    }
}

【问题讨论】:

  • 你的方法对我来说似乎没问题,有什么问题?
  • 还有一点,如果像这样在更新循环中将gameStart 设置为true,那么在整个程序中它只会被调用一次。您是否再次将其设置为 false 其他地方? ://
  • 我想一段时间后你会想要做这个加速,重复做这个你可能想使用这个函数docs.unity3d.com/ScriptReference/…
  • 我知道这个程序只会被调用一次,因为目前的情况是球一直保持恒定的速度,但我想要一个在时间中逐步加速的球。
  • 在下面查看我的答案I want a ball which is step by step accelerating during time

标签: c# unity3d


【解决方案1】:

你可以试试这个,我没有改变任何变量名来保持对你原始代码的熟悉

Rigidbody2D myRigidbody
void Awake(){ myRigidbody = GetComponent<Rigidbody2D>(); }

void Start () 
{   
    Application.targetFrameRate = 60;
    gameStart = false;

    // Invokes the method setGameStartToFalse in 2 seconds, then repeatedly every 1 seconds.
    InvokeRepeating("setGameStartToFalse", 2f, 1.0F);
}

void FixedUpdate ()
{
    if (!gameStart) 
    {
        if (Input.touchCount >= 1) 
        {
            gameStart = true;
            myRigidbody.AddForce(new Vector2 (1f, 0.5f) * force);
        }
    }
}

void setGameStartToFalse()
{
    gameStart = false;
}

【讨论】:

  • 谢谢。每次我点击屏幕时,该代码都会加速我的球。看起来不错,但问题出在轨道上。之前,匀速球有相同的轨道(从大约45角的边上减去),用这个代码,球的轨道是不可预测的。
  • 1. 我想要一个在时间中逐步加速的球 - 如果您不想要,请评论此行 @987654323 @ 2. 从您给定的上下文中,我无法收集有关此“轨道”以及您如何使其在当前上下文中工作的任何信息。一些细节会有所帮助
  • if (Input.touchCount >= 1) 我将此代码仅用于一次调用(用户点击屏幕,球将开始以恒定速度移动)。现在,我正在寻找一种方法,让这个球在一段时间内加速一点,但没有任何接触(自动)。我想象用户玩游戏并且那个球在一段时间内移动得越来越快。关于轨道,球总是有相同的轨道oi64.tinypic.com/14l7n01.jpg :)
  • 只是 FWIW,您不能在 Update 中调用 GetComponent。我在修复中进行了编辑。
  • 不起作用。我对“轨道”有同样的问题。球出乎意料地具有令人难以置信的速度和轨道。
【解决方案2】:

Update() 方法中,您设置了gamestart to true,因此应用程序不会执行第一个if 中的代码,直到您再次设置gamestart to false。您还必须检查MonoBehaviour 是否已启用,否则更新将不会执行

【讨论】:

    猜你喜欢
    • 2012-05-29
    • 2015-06-01
    • 2013-08-30
    • 2019-02-22
    • 1970-01-01
    • 2013-08-10
    • 2011-03-07
    • 2011-10-15
    • 1970-01-01
    相关资源
    最近更新 更多