Search…

Hiệu Ứng Camera Zoom Trong Unity

29/09/20202 min read
Hướng dẫn hiện thực hiệu ứng Camera Zoom trong Unity

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ảng minmax 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àm ZoomIn/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

STDIO_UnityCameraZoom

ss_1
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024