【问题标题】:Moving a cardboard around移动纸板
【发布时间】:2016-09-15 13:32:57
【问题描述】:

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

我一直在为 Google Cardboard 制作一个小游戏,以演示场景为基础。我有一些代码可以检查“触发拉动”,然后应该将 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);
    }
  }

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

【问题讨论】:

  • 嘿,尝试查看 Cardboard SDK 文档,但 Google 似乎做了很多更改,并且您使用的版本不再记录在他们的网站上。因此,一些一般性建议: 1# 将调试点放在更新位置的行上; 2# 检查该行代码的值。一旦你看到哪些值出错了,你就会知道罪魁祸首在哪里。可能是 Cardboard SDK 重置了位置,因为您使用了“一次性旋转”向量,当头部停止移动时该向量变为 0。
  • 问题出在您检查 Cardboard.SDK.Triggered 之前。你在那里设置位置(实际上是多次)。首先进行所有的计算和检查,最后只设置一次实际位置(如果需要)
  • @Kamen 我上周才下载了 SDK,所以如果我得到一个旧版本会很奇怪。也许我会再次下载并检查。 PS:你能链接我SDK文档吗?我似乎找不到它们。

标签: c# transform unity5 google-cardboard


【解决方案1】:

好的,我想出了如何处理运动,我将在此处发布解决方案,以供将来无法弄清楚的任何人使用。快速说明:我确实更新到了最新版本的 SDK,但除了命名之外,这应该没什么区别。

所以,第 1 步:

创建一个对象以用作您的控制器。我刚刚使用了资产包中的一个原型立方体,但不管怎样都行(最好是空对象)。

将此对象或多或少放在两个摄像头的中心点。

将您的 GvrMain 对象与控制器对象(通过将其拖到控制器对象上)以及您想要与播放器一起移动的任何其他组件(枪、GUI 等)作为父对象

第 2 步:

为控制器对象创建一个脚本。

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

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

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

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

一些缺点:

  • 您必须反复按下触发器,使用 while() 似乎会破坏统一性。这似乎很容易解决

  • 代码 sn-p 立即向上平移 1。不确定如何将其作为稳定加速。

希望这对遇到我问题的人有所帮助。

【讨论】:

    猜你喜欢
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    相关资源
    最近更新 更多