RectTransform顺利跟踪gameObject

时间:2015-02-04 08:14:37

标签: unity3d

我希望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 个答案:

答案 0 :(得分:4)

有很多选择:

1)您可以将gui画布添加到worldObject并使用此画布渲染面板(只需将其添加为子画面),但这可能不是您需要的。

2)为了消除锯齿状的移动,你应该以这种或那种方式补间。 DOTween是我个人的偏好,下面的内容将为您提供所需的结果:

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

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

我建议使用一个tweener,以免弄乱你的更新功能,一般来说,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);

将其置于更新功能中,它将使游戏对象遵循特定的newPosition