如何在凝视时保持旋转 GameObject?

How to keep rotating GameObject on gazing?

我遇到了一个小问题。

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

我想让立方体一直旋转。我可以用 transform.Rotate-function 旋转,但问题是它只旋转 1 个游戏刻度(我认为),因为我触发的事件是 "Pointer Enter".


我的问题:

有没有你可以触发的事件,当你在对撞机的距离内时,它会继续执行给定的方法? (比如看立方体应该旋转,不看立方体不旋转)

我试图用 while(true) 循环来解决这个问题,但游戏只是崩溃了。

例如,在 PC/Standalone 应用程序中,您可以简单地使用私有方法 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));
    }
}

第二个例子:我在entering/exiting立方体时分别使用了我设置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));
    }
}

关于如何正确实施它的任何想法?提前致谢!

你会运行进入无限循环:

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

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

您需要使用 Update 函数,因为它每帧 运行。将 hoverState 设置为 true "Pointer Enter" 事件并在 "Pointer Exit" 事件中设置 false 然后在 Update 函数中使用 hoverState 来确定何时旋转游戏对象。

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));
}