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

本文探讨了在Unity中使对象跟随相机的两种主要方法:更新旋转(rotation)和更新位置(position)。通过实例代码展示了如何实现这些效果,并讨论了它们各自的优缺点。

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的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值