当前,我有一个用于手机的脚本,该脚本仅在屏幕上有一个球,当您触摸该球的左侧时,它向左移动,而当您触摸其右侧时,它向右移动。但是,当它移动时,除非我降低浮子移动的幅度(这会使其过慢),否则它是不平滑的。如何在运动平稳的同时保持快速的翻译速度?
if (Input.touchCount > 0)
{
Touch touch = Input.GetTouch(0);
var point = Camera.main.ScreenToWorldPoint(new Vector3(touch.position.x, touch.position.y,
transform.position.z - Camera.main.transform.position.z));
float dx = point.x - transform.position.x;
if (point.x < transform.position.x)
{
//transform.Translate(-15f * Time.deltaTime, 0, 0);
transform.Translate (dx * (1 - Mathf.Pow (0.5f, Time.deltaTime / halfWayTime)), 0, 0);
}
else if (point.x >= transform.position.x + 0.5f)
{
//transform.Translate(15f * Time.deltaTime, 0, 0);
transform.Translate (dx * (1 - Mathf.Pow (0.5f, Time.deltaTime / halfWayTime)), 0, 0);
}
}
答案 0 :(得分:1)
float targetX;
const float halfWayTime = 0.1f;
void Update () {
float dx = targetX - transform.position.x;
transform.Translate (dx * (1 - Mathf.Pow (0.5f, Time.deltaTime / halfWayTime), 0, 0);
}
这将创建运动模式,该运动模式一开始会很快,但最终会变慢,并且可以随时编辑targetX。 halfWayTime
是对象完成目标路径一半的时间,如果为0.1,则在0.1s内它将移动初始距离的50%,持续0.2s-75%,持续0.3s- 87.5%等等。
顺便说一句,您可以修改此代码以使其适用于所有坐标:
void Update () {
transform.position = Vector3.Lerp (
target,
transform.position,
Mathf.Pow (0.5f, Time.deltaTime / halfWayTime)
);
}