如何保持注视时旋转GameObject?

时间:2018-11-16 17:13:03

标签: c# android unity3d google-vr google-vr-sdk

我遇到了一个小问题。

我制作了一个3D立方体,并设置了GoogleVR SDK,以便在VR屏幕的中点进入立方体时使用事件触发器。发生这种情况时,将触发我的自定义方法LookAtCube()

我希望它使立方体不断旋转。我可以使用transform.Rotate-function进行旋转,但是问题是,它只旋转1个游戏滴答(我认为),因为我触发的事件是“指针输入”。


我的问题:

是否存在一个可以触发的事件,该事件在对撞机的距离之内会继续执行给定的方法? (例如,当看着立方体时,它应该旋转,当不看着立方体时,它应该旋转)。

我尝试使用while(true)循环修复此问题,但游戏只是崩溃了。

例如,在PC /独立应用程序上,您可以简单地使用私有方法OnMouseOver()。我想要这个,但是然后将焦点放在VR屏幕上。

这是我到目前为止尝试过的(2个示例):

第一个示例:它只是旋转一点并停止(所以我猜它会以设置的速度旋转1个游戏滴答声)。

using UnityEngine;


public class MoveCube : MonoBehaviour
{
    float rotateSpeed = 0.5f;

    // Use this for initialization
    void Start()
    {
    }

    public void LookAtCube()
    {
        transform.Rotate(new Vector3(rotateSpeed, rotateSpeed, rotateSpeed));
    }

    public void LookOutCube()
    {
        transform.Rotate(new Vector3(0, 0, 0));
    }
}

第二个示例::我使用了一个布尔值,在进入/退出多维数据集时分别设置了true / false。然后while循环应使其旋转,但游戏会崩溃(因为它完全崩溃了,所以看不到错误消息,但我猜它有一个溢出期望)。

using UnityEngine;


public class MoveCube : MonoBehaviour
{
    float rotateSpeed = 0.5f;
    Boolean hoverState = false;

    // Use this for initialization
    void Start()
    {
    }

    public void LookAtCube()
    {  
        while(hoverState == true){
             transform.Rotate(new Vector3(rotateSpeed, rotateSpeed, rotateSpeed));
        }
    }

    public void LookOutCube()
    {
        hoverState = false;
        transform.Rotate(new Vector3(0, 0, 0));
    }
}

关于如何正确实施它的任何想法?预先感谢!

1 个答案:

答案 0 :(得分:1)

您将在此处遇到无限循环:

while(hoverState == true)
{
   transform.Rotate(new Vector3(rotateSpeed, rotateSpeed, rotateSpeed));
}

那是因为您没有等待帧,其他脚本也没有机会运行。

您需要使用Update函数,因为它运行每一帧。将hoverState设置为true的“指针进入”事件,将false设置为“指针退出”事件,然后在hoverState函数中使用Update确定何时旋转游戏对象。

float rotateSpeed = 0.5f;
bool hoverState = false;


public void LookAtCube()
{
    hoverState = true;
}

public void LookOutCube()
{
    hoverState = false;
}

void Update()
{
    if (hoverState)
        transform.Rotate(new Vector3(rotateSpeed, rotateSpeed, rotateSpeed));
}