【问题标题】:Vector3.Lerp with code in UnityVector3.Lerp 与 Unity 中的代码
【发布时间】:2015-01-11 08:51:20
【问题描述】:

我正在统一制作一个基本的 2D 太空射击游戏。我的动作很好,相机跟随玩家。我一直在摸索如何让相机稍微延迟,从玩家移动到相机移动以赶上它而不传送。有人告诉我使用 Vector3.Lerp 并从 stackoverflow 答案中尝试了一些东西,但似乎没有一个适用于我的代码设置方式。有什么建议? (myTarget 链接到播放器)

public class cameraFollower : MonoBehaviour {
public Transform myTarget;


void Update () {
    if(myTarget != null){
        Vector3 targPos = myTarget.position;
        targPos.z = transform.position.z;
        transform.position = targPos;

        }

    }
}

【问题讨论】:

  • 此类问题请使用unity3d标签。
  • @LexLi 我很抱歉!

标签: c# unity3d


【解决方案1】:

如果您进行线性插值 (Lerp),您将面临 Time.deltaTime * speed > 1 的风险,在这种情况下,相机将开始外插。也就是说,如果您的目标,它会走在前面,而不是跟随它。 另一种方法是在线性插值中使用 pow。

float speed = 2.5f;
float smooth = 1.0f - Mathf.Pow(0.5f, Time.deltaTime * speed);
transform.position = Vector3.Lerp(transform.position, targetPos, smooth);

Mathf.Pow(0.5, time) 表示在 1/speed 秒后,将行进到目标点的一半距离。

【讨论】:

    【解决方案2】:

    Lerping 相机移动的想法是让相机逐渐平稳地到达目标位置。

    相机越远,每帧的移动距离越大,但相机越近,每帧的距离越小,相机越容易进入目标位置。

    例如,尝试将您的 transform.position = targPos; 行替换为:

    float speed = 2.5f; // Set speed to whatever you'd like
    transform.position = Vector3.Lerp(transform.position, targPos, Time.deltaTime * speed);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-07
      • 1970-01-01
      相关资源
      最近更新 更多