失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【游戏开发实战】Unity 2D游戏手指控制移动摄像机镜头和双指缩放镜头(愤怒的小鸟为例)

【游戏开发实战】Unity 2D游戏手指控制移动摄像机镜头和双指缩放镜头(愤怒的小鸟为例)

时间:2019-01-16 18:20:55

相关推荐

【游戏开发实战】Unity 2D游戏手指控制移动摄像机镜头和双指缩放镜头(愤怒的小鸟为例)

文章目录

一、前言二、导入图片素材三、制作场景预设四、创建脚本:CameraControl.cs五、挂脚本六、运行测试

一、前言

点关注不迷路,持续输出Unity干货文章。

嗨,大家好,我是新发。今天教大家如何实现这个功能:Unity 2D游戏手指控制移动摄像机镜头和双指缩放镜头。

我们以愤怒的小鸟为例。

本文最终效果如下:

本文Demo工程已上传到CodeChina,感兴趣的同学可自行下载学习。

地址:/linxinfa/AngryBirdScene

注:我使用的Unity版本是.2.7f1c1 (64-bit)

二、导入图片素材

导入图片素材到Unity工程中。

三、制作场景预设

制作背景预设:Bg.prefab,制作小鸟预设:Bird.prefab

如下:

四、创建脚本:CameraControl.cs

创建脚本CameraControl.cs,实现鼠标(手指)控制摄像机移动和缩放的功能,代码如下:

// CameraControl.csusing UnityEngine;[RequireComponent(typeof(Camera))]public class CameraControl : MonoBehaviour{private Camera m_cam;private Transform m_selfTrans;private bool m_fingerDown = false;/// <summary>/// 单指滑动的手指位置/// </summary>private Vector3 m_oneFingerDragStartPos;/// <summary>/// 双指缩放的上一帧的双指距离/// </summary>private float m_twoFingerLastDistance = -1;private void Awake(){m_cam = GetComponent<Camera>();m_selfTrans = transform;}private void Update(){#if UNITY_EDITOR || UNITY_STANDALONEif (Input.GetMouseButtonDown(0)){m_fingerDown = true;m_oneFingerDragStartPos = GetWorldPos(Input.mousePosition);}if (Input.GetMouseButtonUp(0)){m_fingerDown = false;m_twoFingerLastDistance = -1;}if (m_fingerDown){HandleFingerDragMove(Input.mousePosition);}var distance = Input.GetAxis("Mouse ScrollWheel");HandleMouseScrollWheel(distance * 10);#elseif (2 == Input.touchCount){// 双指缩放HandleTwoFingerScale();}else if (1 == Input.touchCount){if (TouchPhase.Began == Input.touches[0].phase){m_fingerDown = true;m_oneFingerDragStartPos = GetWorldPos(Input.mousePosition);}else if (TouchPhase.Moved == Input.touches[0].phase){// 单指滑动HandleFingerDragMove(Input.touches[0].position);}m_twoFingerLastDistance = -1;}else{m_fingerDown = false;m_twoFingerLastDistance = -1;}#endif}/// <summary>/// 单指滑动/// </summary>private void HandleFingerDragMove(Vector2 fingerPos){//滑动差Vector3 cha = m_oneFingerDragStartPos - GetWorldPos(fingerPos);Vector3 newP = m_cam.transform.position;newP.x = newP.x + cha.x;if (newP.x > 17) {newP.x = 17; }if (newP.x < -10) {newP.x = -10; }newP.y = newP.y + cha.y;if (newP.y > 1.4f) {newP.y = 1.4f; }if (newP.y < 0) {newP.y = 0; }m_selfTrans.position = newP;}/// <summary>/// 双指缩放/// </summary>private void HandleTwoFingerScale(){float distance = Vector2.Distance(Input.touches[0].position, Input.touches[1].position);if (-1 == m_twoFingerLastDistance) m_twoFingerLastDistance = distance;// 与上一帧比较变化float scale = 0.1f * (distance - m_twoFingerLastDistance);ScaleCamere(scale);m_twoFingerLastDistance = distance;}/// <summary>/// 鼠标滚轮缩放/// </summary>/// <param name="distance"></param>private void HandleMouseScrollWheel(float distance){if (0 == distance) return;ScaleCamere(distance);}/// <summary>/// 缩放摄像机的视口/// </summary>/// <param name="scale"></param>private void ScaleCamere(float scale){m_cam.orthographicSize -= scale * 0.1f;if (m_cam.orthographicSize < 4){m_cam.orthographicSize = 4;}if (m_cam.orthographicSize > 6){m_cam.orthographicSize = 6;}}/// <summary>/// 屏幕坐标换算成3D坐标/// </summary>/// <param name="screenPos">屏幕坐标</param>/// <returns></returns>Vector3 GetWorldPos(Vector2 screenPos){return m_cam.ScreenToWorldPoint(new Vector3(screenPos.x, screenPos.y, 0));}}

五、挂脚本

CameraControl.cs脚本挂到主摄像机上。

六、运行测试

运行Unity,测试效果如下:

完毕。

如果觉得《【游戏开发实战】Unity 2D游戏手指控制移动摄像机镜头和双指缩放镜头(愤怒的小鸟为例)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。