RectTransform 顺利跟踪游戏对象

RectTransform tracking gameObject smoothly

我想要 Unity 4.6 中的 RectTransform(面板)跟随 worldObject。我得到了这个工作,但运动并不像我想要的那样流畅。它看起来有点参差不齐,当我开始移动相机时它会滞后。

    Vector2 followObjectScreenPos = Camera.main.WorldToScreenPoint (planet.transform.position);
    rectTransform.anchoredPosition = new Vector2 (followObjectScreenPos.x - Screen.width / 2, followObjectScreenPos.y - Screen.height / 2);

非常感谢提示和技巧。 :-)

有一堆选项:

1) 您可以向 worldObject 添加一个 gui canvas 并使用此 canvas 渲染您的面板(只需将其作为子项添加),但这可能不是您所需要的。

2) 要消除锯齿状运动,您应该以一种或另一种方式进行补间。 DOTween 是我个人的偏好,其中遵循以下几行的内容将为您提供所需的结果:

Tweener tweener = transfrom.DOMove (Target.position, 1).SetSpeedBased();
tweener.OnUpdate (() => tweener.ChangeEndValue (Target.position, true));

3) 如果您不想在代码中包含依赖项,您可以在更新函数中在当前位置和所需位置(或者在您的情况下 - anchoredPosition)之间执行线性插值。

我建议使用 tweener 以免扰乱您的更新功能,而且通常 tweener 在各种游戏中都有大量潜在用途。

如果您不想使用补间库,下面是线性插值的代码示例:

float smoothFactor = 1.0f; //used to sharpen or dull the effect of lerp
var newPosition = new Vector3(x,y,z);
var t = gameObject.transform;
t.position = Vector3.Lerp (t.position,
                           newPosition,
                           Time.deltaTime * smoothFactor);

将它放在 Update 函数中,它将使游戏对象遵循特定的 newPosition