3d游戏中剧情开启扭转镜头的实现

来源:互联网 发布:大数据产品市场份额 编辑:程序博客网 时间:2024/04/29 17:31

很多3d游戏中在玩家与npc发生对话时候会有一个扭转镜头的动画,其实实现起来并不是很难,只是略微涉及向量的点积和叉积,先上代码吧,这是在unity中运行的

using UnityEngine;using System.Collections;public class CameraAction : MonoBehaviour {public GameObject m_npc;//npcpublic GameObject m_player;//玩家private Camera m_mainCam;//照相机private Vector3 m_camTagPos;// Use this for initializationvoid Start () {m_mainCam = Camera.main;UpdateCameraRotation();}// Update is called once per framevoid Update () {UpdateCameraTagPosition();UpdateCameraPosition();UpdateCameraRotation();}//更新照相机朝向,实时对准玩家void UpdateCameraRotation(){//玩家世界坐标转为照相机坐标系坐标,得到向量,unity的Quaternion有个LookRotation方法很方便,可以通过一个朝向向量得到角度Vector3 p2c = (m_player.transform.position - m_mainCam.transform.position).normalized;m_mainCam.transform.rotation = Quaternion.LookRotation(p2c);}//实时更新照相机的位置,使得趋向目标点void UpdateCameraTagPosition(){//叉积的方式求得垂直//得到npc与玩家两点间向量Vector3 p2n = (m_player.transform.position - m_npc.transform.position).normalized;//由于最终的照相机位于玩家同一平面,可将p2n与向量(0, 1, 0)叉积Vector3 p2c = Vector3.Cross(p2n, Vector3.down);m_camTagPos = m_player.transform.position + p2c*5;}//缓动到目标点void UpdateCameraPosition(){m_mainCam.transform.position = Vector3.Lerp(m_mainCam.transform.position, m_camTagPos, 0.1f);}}

利用点积的方式比较麻烦,所以本id使用了叉积的方式来实现

0 0
原创粉丝点击