摄像机旋转移动
2017-02-06 11:59
330 查看
using UnityEngine; using System.Collections; public class CamCtrl : MonoBehaviour { static public CamCtrl instance; Vector3 camPosInit; public Transform transFollowTarget = null; void Awake() { instance = this; zoomDist = Mathf.Abs(transCam.localPosition.z); } void Start() { MouseInput.instance.leftDragDeltaEvent += RotManual; MouseInput.instance.leftRelaxedEvent += RotAuto; // MouseInput.instance.middleDragDeltaEvent += MoveManual; MouseInput.instance.middleRelaxedEvent += MoveAuto; // MouseInput.instance.mouseScrollEvent += Zoom; camPosInit = transform.position; zoomTarget = transCam.localPosition; } // Update is called once per frame void Update() { ZoomFollow(); } /// <summary> /// //////////////////////////////////////////////////////////////////////// /// </summary> float rotSpeed = 0.5f; void RotManual(Vector2 deltaPos) { Vector3 euler = transform.localEulerAngles; euler.x -= deltaPos.y * rotSpeed; euler.y += deltaPos.x * rotSpeed; euler.x = Mathf.Clamp(euler.x, 45, 90); transform.localEulerAngles = euler; } float rotLerpSpeed = 3; float angleYTarget = 0; public float AngleYTarget { get { return angleYTarget; } } void RotAuto(Vector2 deltaPos) { Vector3 euler = transform.localEulerAngles; euler.y = Mathf.LerpAngle(euler.y, angleYTarget, rotLerpSpeed * Time.deltaTime); transform.localEulerAngles = euler; } /// <summary> /// //////////////////////////////////////////////////////////////////////// /// </summary> float moveSpeed = 0.003f; void MoveManual(Vector2 deltaPos) { Vector3 move = new Vector3(-deltaPos.x, -deltaPos.y, 0); move *= moveSpeed; move *= Mathf.Abs(transCam.localPosition.z); transform.Translate(move); Vector3 pos = transform.position; pos.y = camPosInit.y; transform.position = pos; } float moveLerpSpeed = 6; void MoveAuto(Vector2 deltaPos) { Vector3 targetPos = transFollowTarget == null ? camPosInit : transFollowTarget.position; transform.position = Vector3.Lerp(transform.position, targetPos, moveLerpSpeed * Time.deltaTime); } /// <summary> /// //////////////////////////////////////////////////////////////////////// /// </summary> public Transform transCam; float scrollSpeed = 15; Vector3 zoomTarget; float zoomLerpSpeed = 5; void Zoom(float scroll) { Vector3 pos = transCam.localPosition; pos.z += scroll * scrollSpeed; pos.z = Mathf.Clamp(pos.z, -60, -10); zoomTarget = pos; } void ZoomFollow() { transCam.localPosition = Vector3.Lerp(transCam.localPosition, zoomTarget, zoomLerpSpeed * Time.deltaTime); } float zoomDist; public float ZoomDist { get { return zoomDist; } } public void SetCamCtrl(Transform transFollowTarget, float angleYTarget, float dist) { zoomDist = dist; this.transFollowTarget = transFollowTarget; this.angleYTarget = angleYTarget; zoomTarget = new Vector3(0, 0, -dist); } }
相关文章推荐
- 鼠标控制摄像机旋转,平移,物体的移动
- 用C#控制摄像机的移动 旋转 缩放
- 游戏开发之用摇杆控制摄像机的移动旋转缩放
- Unity摄像机 向指定位置移动旋转 C#脚本
- 摄像机的左右前后移动以及旋转
- Flash与3D编程探秘(五)- 摄像机旋转和移动
- 噩梦射手 心得 移动旋转面向 摄像机跟随
- 摄像机的旋转,移动,缩放
- 1. 通过移动鼠标旋转摄像机观察模型
- Flash与3D编程探秘(五)- 摄像机旋转和移动
- unity GearVr 摄像机移动和旋转问题
- 摄像机围绕0.0.0点旋转并显示FPS值
- iOS中动画的实现:以及视图的移动、缩放和旋转
- 精灵的移动效果,旋转效果
- IOS中动画的实现:以及视图的移动、缩放和旋转
- IOS中动画的实现:以及视图的移动、缩放和旋转
- 【IOS】扩展UIImageViewEx实现:手势移动,旋转,缩放(附带一个收缩的文字标签功能)
- Unity3D控制物体前后左右移动、旋转及相机跟随
- cocos2d-x 关于旋转和移动的一点小技巧
- Unity3D入门(五):鼠标控制旋转、摄像机缩放