gpt4 book ai didi

c# - Vector3.Lerp 无法在我的相机上工作

转载 作者:搜寻专家 更新时间:2023-11-01 07:52:13 26 4
gpt4 key购买 nike

我有一个带有 2d 对撞机的立方体游戏对象,当有人击中相机时应该向上 10 个单位,但很顺利,相机转到正确的位置但没有阻尼。

public Transform target;
public float damping = 0.1f;

void OnTriggerEnter2D(Collider2D other)
{
Vector3 newPoint = Vector3.Lerp(target.transform.position,
target.transform.position + Vector3.up * 10.0f,
damping);

target.transform.position = newPoint;
}

最佳答案

这不起作用的原因是因为您没有正确使用 Lerp。这就是线性插值 (Lerp) 的数学原理:

假设我们有一个点 (0, 0) 和一个点 (1, 1)。为了在点之间进行计算,我们提供了从 0.0f1.0ft 值。此 t 表示两点之间的比率(0.0f(0, 0)1.0f(1, 1))。例如,0.5ft 值将导致点 (0.5f, 0.5f)

现在用一个不那么简单的例子对此进行扩展,考虑两点:var a = Vector2(1.0f, -1.0f)var b = Vector2(0.0f, 1.0f)Lerp(a, b, 0.5f) 的结果是 Vector2(0.5f, 0.0f) 因为这是中间点。我们称答案为 c。给出答案的等式是 c = a + (0.5f * (b - a))。这来自对线性代数的基本理解,其中两个点相互减去得到一个向量,并将一个向量与一个点相加得到另一个点。

好的,现在让这段代码真正按照您想要的方式工作。您的脚本可能看起来像这样:

float moveTime = 10.0f; // In seconds
float moveTimer = 0.0f; // Used for keeping track of time

bool moving = false; // Flag letting us know if we're moving

float heightChange = 10.0f; // This is the delta

// These will be assigned when a collision occurs
Vector3 target; // our target position
Vector3 startPos; // our starting position

void OnTriggerEnter2D(Collider2D other)
{
if (!moving)
{
// We set the target to be ten units above our current position
target = transform.position + Vector3.up * heightChange;

// And save our start position (because our actual position will be changing)
startPos = transform.position;

// Set the flag so that the movement starts
moving = true;
}
}

void Update()
{
// If we're currently moving and the movement hasn't finished
if (moving && moveTimer < moveTime)
{
// Accumulate the frame time, making the timer tick up
moveTimer += Time.deltaTime;


// calculate our ratio ("t")
float t = moveTimer / moveTime;

transform.position = Vector3.Lerp(startPos, target, t);
}
else
{
// We either haven't started moving, or have finished moving
}
}

希望这对您有所帮助!

关于c# - Vector3.Lerp 无法在我的相机上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33534186/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com