Blink object

Cách làm đối tượng nhấp nháy

Giới thiệu

Bài viết này sẽ giới thiệu các cách để tạo một đối tượng nhấp nháy theo một chu kỳ không đổi

Ví dụ như khi nhân vật của bạn nhận sát thương và nhận được hiệu ứng miễn dịch trong một thời gian ngắn, một hiệu ứng blink để nhận biết rằng nhân vật của bạn vừa bị nhận sát thương và khi hết blink thì nhân vật của bạn sẽ lại có thể nhận sát thương tiếp

Các cách tạo blink object

  1. Hiển thị và ẩn luân phiên
  2. Thay đổi alpha của mesh hoặc sprite giữa các giá trị 0 và 1
  3. Thay đổi alpha theo đồ thị hính sin
  4. Thay đổi alpha bằng animation

Và đây là kết quả

Đối với các thành phần ui GUI bạn chỉ cần thay đổi kiểu của target từ Renderer thành Behaviour

Thay đổi tốc độ nhấp nháy

Trong ví dụ trước thời gian hiển thị và ẩn là giống nhau điều này là do chúng đều sử dụng cùng giá trị cycle * 0.5f. Chúng ta sẽ tạo thêm một biến riêng để điều chỉnh tỉ lệ như sau

Các ví dụ trước đã giới thiệu cách tạo ra hiệu ứng blink bằng cách bật tắt componenet Renderer hoặc Behaviour

Tiếp theo chúng ta cùng tìm hiểu cách thay đổi alpha để tạo hiệu ứng nhấp nháy

Thay màu của material

Bạn có thể truy cập thuộc tính color thông qua material của Renderer như thế này

material.color

trông khá là đơn giản, khi chỉ cần thay đổi color của material mà không cần chỉnh sửa thông tin vertex nhưng hãy lưu ý rằng Việc bạn thay đổi material sẽ khiến nó không còn là material ban đầu nữa chính vì vậy nếu bạn áp dụng blink cho nhiều đối tượng (chẳng hạn như vườn đom đóm hay số lượng lớn các enemy bị dính sát thương) số lượng material sẽ bị nhân đôi và số lượng cuộc gọi SetPass sẽ tăng lên

Như bạn thấy trong Awake khi truy cập vào thuộc tính material một bản copy của material sẽ được tạo ra. Bạn sẽ có nhiệm vụ loại bỏ những tài nguyên dạng này khi không dùng nữa hoặc bạn cũng có thể để việc đó cho Unity. Mỗi khi chuyển scene phương thức Resources.UnloadUnusedAssets được gọi chúng sẽ tự động loại bỏ những tài nguyên bạn đã tạo ra

Thông tin từ document của unity bạn có thể xem ở đây

Thay đổi color của SpriteRenderer

Nếu là trò chơi 2D hoặc bạn sử dụng SpriteRenderer bạn có thể thay đổi trực tiếp màu của SpriteRenderer. Cách này không thay đổi material vì vậy SetPass Call không tăng tỷ lệ thuận với đối tượng.

Sử dụng các hàm lượng giác

Quan sát ví dụ sau

Ở đây giá trị alpha được tính toán bằng các hàm lượng giác, phương thức Mathf.Cos là một phương thức biểu thị cosin của hàm lượng giác. Và kết quả là bạn nhận được giá trị lặp lại như 1 -> 0 -> -1 -> 0 -> 1 -> … Vì nó quay quanh 2PI vì vậy ta tính toán hệ số sao cho chu kỳ có giá trị là giá trị của biến cycle

Ngoài ra bạn cũng có thể sử dụng AnimationCurve để kiểm soát hiệu ứng nhấp nháy

Animator

Cả hai cách nhấp nháy bằng việc bật tắt component hay thay đổi alpha ở trên bạn đều có thể thực hiện chúng bằng animation thay vì sử dụng code. chúng khá tương tự vì vậy tôi sẽ không trình bày lại

Bạn có thể kiểm soát khi nào thì bắt đầu nhấp nháy cũng như khi nào thì kết thúc nó.

Tùy theo kiến trúc trò chơi của bạn mà bạn có các cách gọi StartBlink và EndBlink khác nhau

Lượt nghé thăm