Unity3D让物体始终朝向摄像机的2中方法

1、设置rotation

此方法的基础是将对象绑定在场景中的一个对象上,然后设置对象的rotation或者lookat,需要在Update中时时更新

//方法1
//m_Name.transform.LookAt(Camera.main.transform.position);	
//m_Name.transform.rotation = Quaternion.Slerp(Quaternion.LookRotation(Camera.main.transform.position - m_Name.transform.position), m_Name.transform.rotation, 10 * Time.deltaTime);
//方法2
//Vector3 v = Camera.main.transform.forward;
//m_Name.transform.forward = v;
//m_Name.transform.forward = Vector3.Slerp (m_Name.transform.forward,v,10*Time.deltaTime);
//方法3
    lastRotation = m_cameraTransform.rotation;
    m_Name.transform.rotation = lastRotation;   
上面列出了3中设置方法,对象的初始化方法如下:

headShowObj = new GameObject("playerName");
objTrans = headShowObj.transform;
objTrans.parent = _controller.trans;// Camera.main.transform;
objTrans.localPosition = Vector3.zero + v;
objTrans.localRotation = Quaternion.identity;
objTrans.localScale = Vector3.one;
objTrans.LookAt(Camera.main.transform.position);
m_Name = headShowObj.AddComponent<TextMeshPro>();
m_Name.font = Resources.Load ("UI/Fonts/SIMLI",typeof(TextMeshProFont)) as TextMeshProFont;
m_Name.fontSize = 4;
m_Name.isOverlay = true;
m_Name.alignment = AlignmentTypes.Center;
m_Name.anchor = AnchorPositions.Center;

2、设置position

此方法的基础是在对象初始化的时候设置对象的rotation或者lookat,然后在Update中更新对象的position

初始化方法:

headShowObj = new GameObject("playerName");
objTrans = headShowObj.transform;
objTrans.parent = _controller.trans;// Camera.main.transform;
objTrans.localPosition = _controller.trans.localPosition + v;
objTrans.localRotation = Quaternion.identity;
objTrans.localScale = Vector3.one;
objTrans.LookAt(Camera.main.transform.position);
m_Name = headShowObj.AddComponent<TextMeshPro>();
m_Name.font = Resources.Load ("UI/Fonts/SIMLI",typeof(TextMeshProFont)) as TextMeshProFont;
m_Name.fontSize = 4;
m_Name.isOverlay = true;
m_Name.alignment = AlignmentTypes.Center;
m_Name.anchor = AnchorPositions.Center;
lastRotation = m_cameraTransform.rotation;
m_Name.transform.rotation = lastRotation;


总之,一个更新rotation一个更新position,个人感觉更新position更好一些,父对象rotation时,子对象跟着rotation会出现抖动的现象,如果使用差值,这会出现rotation延迟的现象,所以更新position更好一些。

但是,有一个想法:加入我在初始化时就设置对象的rotation为面向摄像机,而且把它绑定在场景中的父对象,这样就不用updateposition和rotation了,但是试了下,当父对象rotation时,子对象也跟着rotation,所以,rotation或者position是必须有一个是update的。

已标记关键词 清除标记
matlab原文件 版本为2019b MATLAB [1] 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。 MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。 MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本也加入了对C,FORTRAN,C++,JAVA的支持。
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页