保持对象"固定"在相机前面(Google Cardboard + Unity)

时间:2015-12-14 18:15:54

标签: c# unity3d google-cardboard

我是Unity(和VR)的新手,我正试图在Google Cardboard中设置一个小例子,我的模型会在用户转过头时转动 - 类似于Google Cardboard App中的模板演示。因此,当用户向上看时,模型向上旋转,向左看时,模型向左旋转。

我的场景目前有一个 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,它将相应地移动对象。怎么可能呢?

我确实尝试在Main Camera实例中应用transform.LookAt (target),将目标设置为模型。虽然这种方法确实有效,但仍然可以使用它。

2 个答案:

答案 0 :(得分:2)

原来不需要脚本。实现此功能的必要步骤是禁用 CardboardMain ,可以在编辑器中完成。没有跟踪相机保持静止。

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

答案 1 :(得分:2)

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