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
- Hiển thị và ẩn luân phiên
- Thay đổi alpha của mesh hoặc sprite giữa các giá trị 0 và 1
- Thay đổi alpha theo đồ thị hính sin
- Thay đổi alpha bằng animation
Blink bằng cách bật tắt MeshRenderer hoặc SpriteRenderer
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
Blink bằng cách thay đổi alpha
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