【问题标题】:How to keep rotating GameObject on gazing?如何在凝视时保持旋转游戏对象?
【发布时间】:2018-11-16 17:13:03
【问题描述】:

我遇到了一个小问题。

我制作了一个 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));
    }
}

第二个例子:我使用了一个布尔值,在进入/退出立方体时分别设置为真/假。然后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));
    }
}

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

【问题讨论】:

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


    【解决方案1】:

    你会在这里陷入无限循环:

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

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

    您需要使用Update 函数,因为它每帧都会运行。将hoverState 设置为true "Pointer Enter" 事件和false 在 "Pointer Exit" 事件中,然后在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));
    }
    

    【讨论】:

    • 正是我想要的。自己没有找到这个感觉有点愚蠢。没考虑更新方法。。谢谢!!
    • 没什么好丢脸的。如果您将 yield return null 添加到 while 循环的末尾以等待每一帧,那么您的 while 循环将在协程函数中工作,但此处不需要协程。这里有一个简单的Update 函数。不客气!
    猜你喜欢
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多