我正在尝试制作一个空气曲棍球比赛,我需要将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。
答案 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);}