将游戏对象夹在边界内,同时沿x和y缓慢跟随另一个

时间:2017-03-17 20:34:23

标签: unity3d clamp lerp

我正在尝试制作一个空气曲棍球比赛,我需要将AI夹在一个特定的区域,同时当它位于棋盘的一半时它跟随着冰球。我认为下面的代码可以工作但是我从桨上得到了一些奇怪的行为,它将a)在水平开始时卡在y = minY或b)它将看起来连续地在minY和maxY之间相位。

public float speed = 0.075f;
public float minX = -3.7f, minY = 6.7f, maxX = 3.7f, maxY = 0.5f;

void Update () {
    transform.position = new Vector3(Mathf.Clamp(Mathf.Lerp(transform.position.x, _puck.transform.position.x, speed), minX, maxX), 
                                     Mathf.Clamp(Mathf.Lerp(transform.position.y, _puck.transform.position.y, speed), minY, maxY),
                                     transform.position.z);
}

感谢您的帮助。

修改 我应该补充一点,如果我只使用y上的夹子,它会按预期工作,但如果我不夹紧那么它可能会随着时间的推移而缩小x。

2 个答案:

答案 0 :(得分:1)

您的minY大于maxY

我认为你应该颠倒它们。

答案 1 :(得分:0)

Mathf.Clamp钳制两个数字之间的值:https://docs.unity3d.com/ScriptReference/Mathf.Clamp.html

Mathf.Lerp通过第三个值插值2个值。 https://docs.unity3d.com/ScriptReference/Mathf.Lerp.html

如果我有了想法,你希望你的AI被锁定在一个特定的区域:minY,maxY,minX,maxX,它仍然跟着冰球。所以你应该将冰球的位置夹在这些值之间。

void Update () {
transform.position = new Vector3(Mathf.Clamp(_puck.transform.position.x, minX, maxX), Mathf.Clamp(_puck.transform.position.y, minY, maxY),transform.position.z);}