将游戏对象夹在边界内,同时沿着 x 和 y 缓慢跟随另一个对象
Clamp gameobject to within borders while slowly following another along x and y
我正在尝试制作一个空气曲棍球游戏,我需要将 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 上剪下来。
Mathf.Clamp 将值夹在两个数字之间:https://docs.unity3d.com/ScriptReference/Mathf.Clamp.html
Mathf.Lerp 在两个值之间插入第三个值。
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);}
您的 minY
大于 maxY
。
我认为你应该颠倒它们。
我正在尝试制作一个空气曲棍球游戏,我需要将 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 上剪下来。
Mathf.Clamp 将值夹在两个数字之间:https://docs.unity3d.com/ScriptReference/Mathf.Clamp.html
Mathf.Lerp 在两个值之间插入第三个值。 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);}
您的 minY
大于 maxY
。
我认为你应该颠倒它们。