Hiệu ứng Camera Zoom là hiệu ứng được sử dụng nhiều trong các game hiện nay. Hiệu ứng này được ứng dụng trong những đoạn cắt cảnh game, những đoạn tập trung vào 1 nhân vật trong game hay khi cần phóng to/thu nhỏ bản đồ game để có thể điều khiển game theo ý người chơi. Bài viết này sẽ hướng dẫn cách hiện thực hiệu ứng này trong Unity.
OrthographicSize
Mỗi camera đều có 1 biến để lưu trữ kích thước của camera. Đối với game 2D trong Unity, có biến orthographicSize
. Giá trị của biến càng lớn thì kích thước camera càng lớn, đồng nghĩa với các đối tượng trong game sẽ được thu nhỏ lại.
Để chỉnh sửa giá trị của biến này, sử dụng dòng code sau:
Camera.main.orthographicSize = value;
Để tạo cảm giác phóng to camera, thay đổi giá trị orthographicSize
nhỏ dần theo thời gian. Tương tự đối với việc phóng to.
Tạo button phóng to, thu nhỏ camera
Để minh hoạ cho việc phóng to, thu nhỏ camera, tạo ra 2 button có chức năng tương ứng. Sau khi tạo xong 2 button, viết script để hiện thực lại việc phóng to, thu nhỏ camera. Script CameraZoom
như sau:
using UnityEngine; using System.Collections; public class CameraZoom : MonoBehaviour { private float m_cameraMinSize; private float m_cameraMaxSize; private float m_cameraSaveSize; void Start () { m_cameraMinSize = 2f; m_cameraMaxSize = 6f; m_cameraSaveSize = Camera.main.orthographicSize; } public void ZoomIn() { m_cameraSaveSize = Mathf.Clamp(m_cameraSaveSize - 0.5f, m_cameraMinSize, m_cameraMaxSize); StartCoroutine(Zoom(-0.025f)); } public void ZoomOut() { m_cameraSaveSize = Mathf.Clamp(m_cameraSaveSize + 0.5f, m_cameraMinSize, m_cameraMaxSize); StartCoroutine(Zoom(0.025f)); } IEnumerator Zoom(float _step) { while(Mathf.Abs(Camera.main.orthographicSize - m_cameraSaveSize) >= 0.05f) { yield return new WaitForSeconds(0.005f); Camera.main.orthographicSize += _step; } Camera.main.orthographicSize = m_cameraSaveSize; } }
- Dòng 12 – 14: khởi tạo các giá trị ban đầu. Biến
orthographicSize
sẽ dao động trong khoảngmin
vàmax
này. - Dòng 17 – 27: đây là 2 hàm sẽ được button gọi khi có sự kiện nhấn chuột.
- Dòng 29 – 38: hàm
Zoom
được gọi liên tục khi hàmZoomIn
/Out
được gọi. Hàm này có nhiệm vụ thay đổi kích thước của camera cho phù hợp khi nhấn button tương ứng.
Trong script có sử dụng kỹ thuật cập nhật đối tượng thông qua hàm StartCoroutine
. Các hàm có dạng này sẽ được cập nhật mà không cần sự can thiệp của hàm Update
.
Download Demo
