赞
踩
这几天要写项目参加比赛,需要场景物体始终面向摄像机
查找资料后,发现了一个有趣的函数 :
public void LookAt(Vector3 worldPosition);
它的功能是:
Rotates the transform so the forward vector points at worldPosition.(旋转变换,使正向向量指向worldPosition)
也就是说,它可以使场景物体旋转自身,将正z轴指向参数所表示的那个点
这样一来,我们只需要在脚本的Update()函数里写上
transform.LookAt(摄像机对象.transform.position);
就可以使场景物体始终面向摄像机了
不过我不需要物体的Y轴跟着变,为此我给代码添加了一点“装饰”(^-^)V
最终成果是这样子的:
using UnityEngine; /// <summary> /// 挂在需要看向摄像机的场景物体上,使物体始终固定于某轴面向摄像机 /// </summary> public class LookAtCamera : MonoBehaviour { [Header("面向的摄像机Camera")] public Camera cameraToLookAt; [Header("选择需要固定的轴")] [Tooltip("可以自由选择固定不变的轴,常用的选泽是None或者Y")] public SelectXYZ selectXYZ = SelectXYZ.None; void Update() { //若cameraToLookAt为空,则自动选择主摄像机 if (cameraToLookAt == null) cameraToLookAt = Camera.main; Vector3 vector3 = cameraToLookAt.transform.position - transform.position; switch (selectXYZ) { case SelectXYZ.x: vector3.y = vector3.z = 0.0f; break; case SelectXYZ.y: vector3.x = vector3.z = 0.0f; break; case SelectXYZ.z: vector3.x = vector3.y = 0.0f; break; case SelectXYZ.None: vector3.x = vector3.y = vector3.z = 0.0f; break; } transform.LookAt(cameraToLookAt.transform.position - vector3); } } public enum SelectXYZ { x, y, z, None }
在Unity里是这样子的:
固定轴建议选择None或Y
如果对你有帮助的话,点个赞吧 o(∩_∩)o
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。