Unity 2D游戏相机控制(水平,竖直,角色居中三种模式)

做2D游戏的时候,,无非有三种模式,一种是只有竖直向上,一种是只有水平方向,一种是有水平又有竖直方向,我最近做游戏多关卡模式,不同模式就有着不一样的相机控制,按照平时的写法,也许有很多人就一下子写了三个相机脚本,现在我用了一个枚举类型来控制三个不一样的相机,贴代码:using UnityEngine;using System.Collections;public class CameraCtrl : MonoBehaviour {public enum CameraType{Vertical,Horizontal,Normal}public CameraType cameraType;public float dampTime = 1.5f;public Transform target;// 相机移动速度,初始速度清零private Vector3 velocity = Vector3.zero;// 相机单例private static CameraCtrl instance;public static CameraCtrl Instance {get {return instance;}}// 屏幕的默认宽高的1/100 (预编译)#if UNITY_ANDROIDprivate static float devHeight = 8.54f;private static float devWidth = 4.8f;#elif UNITY_IPHONEprivate static float devHeight = 9.6f;private static float devWidth = 6.4f;#elseprivate static float devHeight = 19.20f;private static float devWidth = 10.80f;#endif// Use this for initializationvoid Awake () {instance = this;// 屏幕适配float screenHeight = Screen.height;//Debug.Log ("screenHeight = " + screenHeight);//this.GetComponent<Camera>().orthographicSize = screenHeight / 200.0f;float orthographicSize = this.GetComponent<Camera>().orthographicSize;float aspectRatio = Screen.width * 1.0f / Screen.height;float cameraWidth = orthographicSize * 2 * aspectRatio;//Debug.Log ("cameraWidth = " + cameraWidth);if (cameraWidth < devWidth){orthographicSize = devWidth / (2 * aspectRatio);Debug.Log ("new orthographicSize = " + orthographicSize);this.GetComponent<Camera>().orthographicSize = orthographicSize;}}// Update is called once per framevoid LateUpdate () {if (target) {SetCamera();} else {SetTarget();}}// 设置相机void SetCamera () {Vector3 point = GetComponent<Camera> ().WorldToViewportPoint (target.position);Vector3 delta = target.position – GetComponent<Camera> ().ViewportToWorldPoint (new Vector3 (0.5f, 0.5f, point.z)); Vector3 destination = transform.position + delta;switch (cameraType) {case CameraType.Vertical:// 竖直相机transform.position = Vector3.SmoothDamp (transform.position,new Vector3 (transform.position.x, destination.y, destination.z),ref velocity, dampTime);break;case CameraType.Horizontal:// 水平相机transform.position = Vector3.SmoothDamp (transform.position,new Vector3 (destination.x, transform.position.y, destination.z),ref velocity, dampTime);break;case CameraType.Normal:// 无限制的相机transform.position = Vector3.SmoothDamp (transform.position,destination,ref velocity, dampTime);break;default:break;}}// 设置目标void SetTarget () {target = GameObject.FindGameObjectWithTag ("Player").transform;}}

欲望以提升热忱,毅力以磨平高山。

Unity 2D游戏相机控制(水平,竖直,角色居中三种模式)

相关文章:

你感兴趣的文章:

标签云: