我试图为一场乒乓球比赛编程AI,并且我试图让球拍游戏对象跟随球赛对象的y坐标运动。
问题是球拍最终只是向上和向下移动,而不是实际跟随球。
这是我用来制作它的脚本。
for (int i = 0; i < array_length; i++) {
output[i].r = input[i].r * 2.0
}
答案 0 :(得分:0)
我认为您并不完全了解代码的工作原理。我们来看看你的Update方法。
if (spherePos < (0) && validUp == (true))
{
transform.Translate(Vector3.up * speed * Time.deltaTime);
}
你在这里说的是,如果球体在Y轴上的位置低于0,那么AI球拍应该向上移动。这不包括球体是向上还是向下移动的条件。因此,球体可以向下移动,你仍然可以向上移动AI桨。
else if (spherePos > (0) && validDown == (true))
{
transform.Translate(Vector3.down * speed * Time.deltaTime);
}
这包含同样的问题。
相反,你可以这样做。
[SerializeField]
private float speed;
private Transform sphere;
private void Start()
{
// In general, I'd recommend avoiding
// GameObject.Find, but we'll use it for now.
sphere = GameObject.Find("Sphere").transform;
}
private void Update()
{
if(sphere.position.y >= transform.position.y)
{
transform.Translate(Vector.up * speed * Time.deltaTime);
}
else if(sphere.position.y <= transform.position.y)
{
transform.Translate(Vector.down * speed * Time.deltatime);
}
}
这基本上将桨叶在Y轴上的位置与球体在Y轴上的位置进行比较,并相应地将桨叶移动到正确的方向。然后你只需要根据需要调整速度值。
请注意,这仅根据球体在Y轴上的位置移动球拍。它没有考虑球体如何从墙壁上反弹或类似的东西。