首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在GetButtonDown上统一三维移动对象的特定时间

在GetButtonDown上统一三维移动对象的特定时间
EN

Stack Overflow用户
提问于 2013-12-19 02:03:26
回答 2查看 8K关注 0票数 2

我有一个空的游戏对象,里面装满了我所有的玩家组件,在它里面是一个模型,当控件被按下时,这个模型会被GetButtonDown实例化。目前,玩家游戏对象中的所有内容都会立即移动到下一个点(基本上是在没有过渡的情况下传送到那里)。有什么办法我可以让它全部通过,比如说1秒,而不是立即去那里?下面是在GetButtonDown上发生的事情

代码语言:javascript
运行
复制
    if (Input.GetButtonDown ("VerticalFwd"))
    {

        amountToMove.y = 1f;
        transform.Translate (amountToMove);
    }

我尝试过transform.Translate (amountToMove * Time.deltaTime *随机化);以及各种使用时间的方法,然而,这似乎不起作用,尽管这似乎是最符合逻辑的方法。我猜是因为GetButtonDown只在按下它时才“运行”,并且没有更新功能来“计时”移动每一个帧?有什么想法吗?amountToMove也被保存为Vector3。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-19 02:19:51

试试.Lerp,它作为一个协同线运行,在一定时间内插入一个值Vector3.Lerp(Vector3 start,Vector3 end,float time)

见文档这里

这应该能让你对发生的事情有一个大致的了解。

代码语言:javascript
运行
复制
Vector3 Distance = End - Start; 
// this will return the difference 

this.transform.position += Distance/time.deltatime * Movetime 
// this divides the Distance equal to the time.deltatime.. (Use Movetime to make the movement take more or less then 1 second

如果距离是1x.1y.1z,而time.deltatime是.1,移动时间是1.你得到一个.1xyz的运动,每一个滴答,花1秒到达终点。

FYI: transform.Translate作为一个花哨的.position +=工作,为此您可以互换使用它们。

编辑这里有几个解决方案

简单::

代码语言:javascript
运行
复制
Vector3 amountToMove = new Vector3(0,1,0); //  Vector3.up is short hand for (0,1,0) if you want to use that instead

if (Input.GetButtonDown ("VerticalFwd"))
    {

        transform.position = Vector3.Lerp(transform.position ,transform.position + amountToMove, 1);
    }

很难而且可能是不必要的:

为您的特定应用程序见这里的文档编写一种线性插值的Coroutine

票数 0
EN

Stack Overflow用户

发布于 2014-05-09 16:54:45

第一个公式是错误的。正确的公式是:

代码语言:javascript
运行
复制
this.transform.position += (Distance/MoveTime) * time.deltatime 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20672170

复制
相关文章

相似问题

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