标签:
局部与世界坐标系除了在父子关系的物体中有重要的应用(父子物体中,局部坐标系与世界坐标系的区别)
在多个同级物体间也有重要应用,(例如围绕移动的物体旋转,摄像机跟随等)
1 public class FollowRotate : MonoBehaviour { 2 public GameObject m_Target; // 目标物体 3 public float m_RotateSpeed = 1F; // 旋转速度 4 private Vector3 m_RelativePosition; // 相对位置 5 // Use this for initialization 6 void Start () { 7 // 获取相对于目标物体的相对位置 8 m_RelativePosition = m_Target.transform.InverseTransformPoint(transform.position); 9 } 10 11 // Update is called once per frame 12 void Update () { 13 // 根据物体的相对位置计算物体的旋转后的相对位置(始终围绕目标的y轴旋转) 14 m_RelativePosition = new Vector3 15 ( 16 m_RelativePosition.x * Mathf.Cos(Time.deltaTime * m_RotateSpeed) - m_RelativePosition.z * Mathf.Sin(Time.deltaTime * m_RotateSpeed), 17 m_RelativePosition.y, 18 m_RelativePosition.z * Mathf.Cos(Time.deltaTime * m_RotateSpeed) + m_RelativePosition.x * Mathf.Sin(Time.deltaTime * m_RotateSpeed) 19 ); 20 // 将旋转后的相对位置转化为世界位置,赋值 21 transform.position = m_Target.transform.TransformPoint(m_RelativePosition); 22 } 23 } 24
摄像机跟随
源码分享:
1 public class CameraFollowController : MonoBehaviour 2 { 3 public GameObject m_Target; // 玩家 4 public Vector3 m_Offset; // 相对玩家的偏移位置 5 public float m_SmoothTime = 0.3F; // 平滑移动时间 6 7 private Vector3 m_Velocity = Vector3.zero; // 摄像机移动速度 8 private Vector3 m_DestPosition; // 摄像机目的地位置 9 10 void Update () 11 { 12 // 转向 - 摄像机看向目标点位置 13 transform.LookAt(m_Target.transform.position); 14 // 获取摄像机目的地位置 - 将相对于目标位置的偏移位置转化为世界坐标 15 m_DestPosition = m_Target.transform.TransformPoint(m_Offset); 16 // 平滑阻尼移动摄像机 17 transform.position = Vector3.SmoothDamp(transform.position, m_DestPosition, ref m_Velocity, m_SmoothTime); 18 } 19 }
标签:
原文地址:http://www.cnblogs.com/muxiaomo/p/4523926.html