首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于区间的单位增量速度

基于区间的单位增量速度
EN

Stack Overflow用户
提问于 2015-12-21 09:22:18
回答 2查看 430关注 0票数 0

我正在尝试获得一个背景,以便开始越来越快地向左移动。是否在考虑使用两个值,一个表示要增加的百分比,另一个表示两次递增之间的间隔,该值也会随着间隔命中次数的增加而变得更大?

代码语言:javascript
运行
复制
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;
}
EN

回答 2

Stack Overflow用户

发布于 2015-12-21 12:14:35

我认为这里有几个问题需要解决:

1.)你每一帧都会将速度乘以.01,这实际上会完全冻结它。我不知道你这样做是什么意思。

2.)你每一帧都会调用GetComponent>Rigidbody2D<(),这是非常昂贵的!您应该为它创建一个类似以下内容的变量:

代码语言:javascript
运行
复制
Rigidbody2d RB;
void Start () {
    RB = GetComponent<Rigidbody2D>();
}

对于如何在每个间隔后提高速度,我可能会声明一个计数器,您可以在每个帧中增加该计数器。如果计数器>间隔,则间隔*= 2且计数器=0

票数 1
EN

Stack Overflow用户

发布于 2015-12-22 03:33:36

首先,在一个变量中获取一次Rigidbody2D,然后使用它。

您可以使用Coroutine来实现此目的。

代码语言:javascript
运行
复制
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);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34387774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档