Unity 2D游戲相機(jī)控制(水平,豎直,角色居中三種模式)
來(lái)源:程序員人生 發(fā)布時(shí)間:2015-05-19 08:00:21 閱讀次數(shù):5337次
做2D游戲的時(shí)候,不過有3種模式,1種是只有豎直向上,1種是只有水平方向,1種是有水平又有豎直方向,我最近做游戲多關(guān)卡模式,不同模式就有著不1樣的相機(jī)控制,依照平時(shí)的寫法,或許有很多人就1下子寫了3個(gè)相機(jī)腳本,現(xiàn)在我用了1個(gè)枚舉類型來(lái)控制3個(gè)不1樣的相機(jī),貼代碼: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;
// 相機(jī)移動(dòng)速度,初始速度清零
private Vector3 velocity = Vector3.zero;
// 相機(jī)單例
private static CameraCtrl instance;
public static CameraCtrl Instance {
get {
return instance;
}
}
// 屏幕的默許寬高的1/100 (預(yù)編譯)
#if UNITY_ANDROID
private static float devHeight = 8.54f;
private static float devWidth = 4.8f;
#elif UNITY_IPHONE
private static float devHeight = 9.6f;
private static float devWidth = 6.4f;
#else
private static float devHeight = 19.20f;
private static float devWidth = 10.80f;
#endif
// Use this for initialization
void 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 frame
void LateUpdate ()
{
if (target) {
SetCamera();
} else {
SetTarget();
}
}
// 設(shè)置相機(jī)
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:// 豎直相機(jī)
transform.position = Vector3.SmoothDamp (transform.position,
new Vector3 (transform.position.x, destination.y, destination.z),
ref velocity, dampTime);
break;
case CameraType.Horizontal:// 水平相機(jī)
transform.position = Vector3.SmoothDamp (transform.position,
new Vector3 (destination.x, transform.position.y, destination.z),
ref velocity, dampTime);
break;
case CameraType.Normal:// 無(wú)窮制的相機(jī)
transform.position = Vector3.SmoothDamp (transform.position,
destination,
ref velocity, dampTime);
break;
default:
break;
}
}
// 設(shè)置目標(biāo)
void SetTarget () {
target = GameObject.FindGameObjectWithTag ("Player").transform;
}
}
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)