移动纸板

时间:2016-05-18 21:13:08

标签: c# transform unity5 google-cardboard

快速免责声明:我不是一个非常高级的C#用户,更习惯于像python这样的语言,所以如果答案就在我面前,我道歉。

我一直在为Google Cardboard做一个小游戏,以演示场景为基础。我有一些代码可以检查“Trigger Pull”,然后将Cardboard相机翻译10个单位。

            //Checks For Magnet Trigger
        if (Cardboard.SDK.Triggered)
        {
            //moves player up at a rate of 10u/s

            transform.Translate(Vector3.up * 10);
            Debug.Log("Triggered_Head");
            //Tell Cardboard to maintain new position
        }

目前,这对于检测磁铁拉力非常有效,并且可以转换纸板。问题是,翻译后几乎立即将纸板传送回基座位置。

目前我已将此代码从CardboardHead.cs插入到UpdateHead()方法(?)中,如下所示:

      // Compute new head pose.
  private void UpdateHead() {
    if (updated) {  // Only one update per frame, please.
      return;
    }
    updated = true;
    Cardboard.SDK.UpdateState();

    if (trackRotation) {
      var rot = Cardboard.SDK.HeadPose.Orientation;
      if (target == null) {
        transform.localRotation = rot;
      } else {
        transform.rotation = target.rotation * rot;
      }
    }

    if (trackPosition) {
      Vector3 pos = Cardboard.SDK.HeadPose.Position;
      if (target == null) {
        transform.localPosition = pos;
          } 
      else {
        transform.position = target.position + target.rotation * pos;
      }
            //Checks For Magnet Trigger
            if (Cardboard.SDK.Triggered)
            {
                //moves player up at a rate of 10u/s

                transform.Translate(Vector3.up * 10);
                Debug.Log("Triggered_Head");
                //Tell Cardboard to maintain new position
            }
        }

    if (OnHeadUpdated != null) {
      OnHeadUpdated(gameObject);
    }
  }

这样做可以做到一切正确,但几乎立即恢复位置(在我假设的下一帧中)。所以我的问题是:我如何制作变换棒,是否有更好的方法来处理这个问题?

1 个答案:

答案 0 :(得分:2)

好吧,我想出了如何处理动作,我在这里发布解决方案给将来无法解决问题的人。快速说明:我确实更新了最新版本的SDK,但除了命名之外,它不应该有所作为。

所以,第1步:

创建一个用作控制器的对象。我只是使用了资产包中的一个原型立方体,但无论什么都可行(空对象最好)。

将此物体或多或少地放置在两个相机的中心点。

将您的GvrMain对象父控制到控制器对象(通过将其拖动到控制器对象上)以及您想要随播放器移动的任何其他组件(枪支,GUI等)

第2步:

为控制器对象创建脚本。

在Update()方法中,添加以下行:

if (GvrViewer.Instance.Triggered)
{
transform.Translate(Vector3.up)
}

旧版本将GvrViewer.Instance替换为Cardboard.SDK

根据自己的喜好自定义您的动作,任何正常的统一功能都应该有效。

一些缺点:

  • 你必须反复按下触发器,使用while()似乎打破统一。这似乎很容易修复

  • 代码段立即翻译为1.不确定如何将其作为稳定的加速度。

希望这可以帮助任何有问题的人。