为什么我的播放器无法自动移动?

时间:2019-05-05 11:46:31

标签: c# unity3d virtual-reality

我无法找到有关自动机芯脚本的错误。我将首先解释我尝试做的事情,以便您可以更好地理解它。所以我正在统一用C#编程。它适用于VR。我创建了一个按钮,当您查看它时它可以作为触发器。当查看按钮时,一扇门下降了,玩家应该在城堡内(自动)移动。

门脚本运行正常,但播放器完全没有移动。我使用了公共Vector3,在其中宣布了玩家在城堡内应该移动的位置(这只是向前的方向)。

不幸的是,代码对我来说看起来不错,我无法弄清楚为什么我的玩家不会移动:/。

所以我尝试玩Vectors,但是我没有运气。

{
    public float speed = 0.5f;
    public Vector3 castlePosition;
    private Vector3 targetPosition;

// Start is called before the first frame update
void Start()
{
    targetPosition = transform.position;
}

// Update is called once per frame
void Update()
{
    RaycastHit hit;

    if (Physics.Raycast(transform.position, transform.forward, out hit))
    {
        if(hit.transform.GetComponent<DoorButton>() != null)
        {
            hit.transform.GetComponent<DoorButton>().OnLook();
            MoveToCastle ();

        }
    }

    transform.position = Vector3.Lerp(transform.position, targetPosition, Time.deltaTime * speed);
}

private void MoveToCastle()
{
    targetPosition = castlePosition;
}

}

我期望MoveToCastle函数会将我的播放器放进城堡(在我之前声明的位置)。

我门上的OnLook功能再次起作用。

在此先感谢您的帮助。 :)

1 个答案:

答案 0 :(得分:0)

一旦raycast变为假,您的MoveToCastle就会停止工作。当射线投射击中时,您可能应该启动一些连续的移动到目标的过程。例如,启动协程,如下所示:

IEnumarable MoveToCastle()
{   
    targetPosition = castlePosition;

    while (transform.position != castlePosition) // careful here! see below
    {
        transform.position = Vector3.Lerp(transform.position, targetPosition, Time.deltaTime * speed);
        yield return null;
    }
}

最好通过减去并与一些较小的值进行比较来比较目标坐标和变换坐标,否则它可能会停留很长时间。