【问题标题】:Keep object "fixed" in front of camera (Google Cardboard + Unity)将对象“固定”在相机前(Google Cardboard + Unity)
【发布时间】:2016-03-20 08:07:12
【问题描述】:

我是 Unity(和 VR)的新手,我正在尝试在 Google Cardboard 中设置一个小示例,其中我有一个模型,当用户转动她的头时会转动 - 类似于 Google Cardboard 应用程序中的面具演示。所以当用户向上看时,模型向上旋转,当向左看时,模型向左旋转等等。

我的场景当前有一个 CardboardMain 和我的 3D 模型。我已将 Cardboard Head 脚本附加到我的模型中,该脚本现在可以随着头部移动而正确旋转。缺少的是让物体保持在相机前面。

为了实现该功能,我创建了一个附加到我的 3D 模型的脚本。脚本如下所示:

using UnityEngine;
using System.Collections;

public class lookAtMe : MonoBehaviour {

    private CardboardHead head;

    private Vector3 offset;
    public GameObject scrimshaw;

    // Use this for initialization
    void Start () {
        head = Camera.main.GetComponent<StereoController>().Head;
        scrimshaw = GameObject.FindGameObjectWithTag ("Scrimshaw");
    }

    // Update at end of frame
    void LateUpdate () {

        // head.transform.position = the positon of the head on the plane
        // head.Gaze.direction = positon of where the head is looking
        offset = head.Gaze.direction + head.transform.position;

        scrimshaw.transform.position = scrimshaw.transform.position + offset;
    }
}

但是,我的模型的位置没有改变。我的印象是,如果我为transform.position 提供一个新向量 3,它将相应地移动对象。还能怎么办?

我确实尝试在主相机实例上应用transform.LookAt (target),将目标设置为模型。虽然这种方法确实有效,但它是一种生涩的可用方式。

【问题讨论】:

  • 如果您将对象放在相机下方的层次结构中会怎样?
  • 感谢您的输入,@DenisEfimov - 请参阅下面的评论。我还将模型移动到一个空的 GameObject 以更好地控制枢轴点。

标签: c# unity3d google-cardboard


【解决方案1】:

原来不需要脚本。实现该功能的必要步骤是从 CardboardMainHead 子项中禁用 Track RotationTrack Position ,这可以在编辑器中完成。不跟踪相机保持静止。

但由于 CardboardHead 脚本应用于对象本身,所有实际的跟踪变换都会直接应用于该对象。

【讨论】:

    【解决方案2】:

    如果您想将任何对象固定在相机前面,请将其设为相机的子对象。您可以在编辑器或运行时执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      相关资源
      最近更新 更多