如何让对象的运动跟随另一个游戏对象的y坐标运动

时间:2017-05-30 21:16:41

标签: unity3d

我试图为一场乒乓球比赛编程AI,并且我试图让球拍游戏对象跟随球赛对象的y坐标运动。

问题是球拍最终只是向上和向下移动,而不是实际跟随球。

这是我用来制作它的脚本。

for (int i = 0; i < array_length; i++) {
    output[i].r = input[i].r * 2.0
}

1 个答案:

答案 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轴上的位置移动球拍。它没有考虑球体如何从墙壁上反弹或类似的东西。