在 Unity 中使用相机进行 3D 文本旋转
3D Text Rotation with the camera in Unity
我是 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");
}
}
}
要获得广告牌行为(文本始终朝向相机),您还必须将更改后的相机旋转应用于文本网格:
_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);
}
我是 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");
}
}
}
要获得广告牌行为(文本始终朝向相机),您还必须将更改后的相机旋转应用于文本网格:
_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);
}