使用Unity中的相机进行3D文本旋转

时间:2017-09-21 07:55:59

标签: unity3d hololens

我是Unity3D的初学者,并且都与游戏开发有关。最近,我试图做一个简单的程序,以便在HoloLens中实现它。目标是让3D文本(" _text")在相机移动的方向上移动,这非常有效。然而,当我移动我的头部(使用HoloLens)(+/-)90度时,我无法读取文本,因为我没有面对文本,180度我看到我的3D文本被倒置了。如果有人能帮助我,我将不胜感激。 :)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TextManager : MonoBehaviour {

    public GameObject _text;
    public TextMesh _startText;

    // Use this for initialization
    void Start () {  
        if (_text == null) _text = GameObject.Find("StartText");
        if (_startText == null) _startText = GameObject.Find("StartText").GetComponent<TextMesh>();   
    }

    // Update is called once per frame
    void Update () {

        if (_text.activeSelf)
        {
            var camPos = Camera.main.transform.position + Camera.main.transform.forward;
            _text.transform.position = camPos;
            _text.transform.localScale = Vector3.one * 0.025f;            
        }

        else
        {
            Debug.Log("deactive _startText");
        }

    }
}

1 个答案:

答案 0 :(得分:1)

要获得广告牌行为(文本始终指向相机),您还必须将更改的相机旋转应用于文本网格:

_text.transform.rotation = Camera.main.transform.rotation;

为了获得更新兴的3D体验,当相机落后时,将文本翻转180°有时会很有用,但保留整体方向。为此:

        Vector3 objectNormal = _text.rotation * Vector3.forward;
        Vector3 cameraToText = _text.transform.position - Camera.main.transform.position;
        float f = Vector3.Dot (objectNormal, cameraToText);
        if (f < 0f) 
        {
            _text.Rotate (0f, 180f, 0f);
        }