Contents

Cách thực hiện chu kỳ ngày đêm trong Godot

Chu kỳ ngày đêm có thể thêm yếu tố hấp dẫn vào trò chơi của bạn, tăng thêm sự đa dạng cho hình ảnh và tạo ra cơ chế thú vị. Các trò chơi như Minecraft, Animal Crossing và Don’t Starve sử dụng kỹ thuật này một cách hiệu quả và đây là một trò chơi mà bạn có thể cân nhắc thêm vào trò chơi của riêng mình, đặc biệt là những trò chơi có yếu tố thời gian thực.

Thật vậy, quá trình kết hợp chu kỳ ngày đêm trong Godot 4 đã được sắp xếp hợp lý và đơn giản hóa đến mức chưa từng có.

Thiết lập trò chơi Godot

Để bắt đầu phát triển chu kỳ ngày đêm trong bối cảnh trò chơi của chúng tôi, điều quan trọng là trước tiên chúng tôi phải thiết lập một nền tảng vững chắc để xây dựng. Điều này có thể đạt được bằng cách bắt đầu một dự án hai chiều mới trong khuôn khổ Godot và đảm bảo rằng tất cả các tham số dự án có liên quan đều được cấu hình đúng.

Mã được sử dụng trong ấn phẩm này có thể được truy cập thông qua kho GitHub, kho lưu trữ này đóng vai trò là nền tảng nguồn mở để chia sẻ và cộng tác. Kho lưu trữ này chứa mã và cấp quyền cho người dùng sử dụng nó miễn phí, tuân theo các điều khoản của giấy phép MIT.

Khi tạo cảnh trò chơi trong Unity, trước tiên người ta phải thiết lập đối tượng Nhân vật người chơi bằng cách khởi tạo một đối tượng

Để người chơi có thể điều hướng trong môi trường trò chơi, cần phải kết hợp một bộ hướng dẫn lập trình cụ thể được gọi là GDScript trong đối tượng ký tự được chỉ định. Quá trình này bao gồm việc áp dụng đoạn mã được cung cấp vào nút liên kết của nhân vật, từ đó kích hoạt khả năng di chuyển của nhân vật.

 extends CharacterBody2D

var speed = 300

func _physics_process(delta):
    var input_dir = Vector2.ZERO

    if Input.is_action_pressed("ui_left"):
        input_dir.x -= 1

    if Input.is_action_pressed("ui_right"):
        input_dir.x \+= 1

    if Input.is_action_pressed("ui_up"):
        input_dir.y -= 1

    if Input.is_action_pressed("ui_down"):
        input_dir.y \+= 1

    velocity = input_dir.normalized() * speed
    move_and_collide(velocity * delta)

Mã được cung cấp cho phép người dùng điều hướng một ký tự bằng cách sử dụng các phím mũi tên. Hơn nữa, việc kết hợp những kẻ thù mà nhân vật chính phải trốn tránh là khả thi. Để đạt được mục đích này, chúng tôi có thể sử dụng các nút StaticBody2D làm đối thủ và thao túng hình thức cũng như vị trí của chúng nếu cần.

/vi/images/player-movement-in-godot-2d.jpg

Thêm bộ hẹn giờ cho chu kỳ ngày và đêm

Để thực hiện chu kỳ ngày-đêm trong trò chơi điện tử, cần phải kết hợp đồng hồ bấm giờ chạy liên tục để chuyển đổi giữa các giai đoạn ngày và đêm, đóng vai trò như một chỉ báo về thời gian đã trôi qua trong suốt trải nghiệm chơi trò chơi.

khởi tạo menu ngữ cảnh trong bảng Cảnh bằng nút chuột phải; từ danh sách các tùy chọn khả dụng xuất hiện khi chọn “Thêm nút”, hãy chọn nút hẹn giờ cụ thể được tìm thấy trong kết quả tìm kiếm của thư viện nút.

Sửa đổi chỉ định của nút Hẹn giờ thành nhãn mang tính mô tả hơn, chẳng hạn như “DayNightTimer” để nâng cao mức độ dễ đọc của nó. Tiếp theo, định cấu hình các thuộc tính của nút Hẹn giờ bằng cách kiểm tra các thuộc tính của nó trong bảng Thanh tra. Đặc biệt, điều chỉnh thuộc tính “Thời gian chờ” về 0 giây, biểu thị thời gian tạm dừng sơ bộ trước khi bắt đầu hẹn giờ và đảm bảo rằng tính năng “One Shot” được bật, khiến bộ hẹn giờ lặp lại liên tục.

Kết hợp triển khai GDScript để xử lý chu kỳ ngày đêm bằng cách kết hợp logic và tính toán thích hợp trong tập lệnh.

 extends Node2D

var day_duration = 30 # Duration of the day in seconds
var night_duration = 30 # Duration of the night in seconds

var is_day = true

func _ready():
    # Start the timer when the scene loads
    $DayNightTimer.start()

func _on_DayNightTimer_timeout():
    if is_day:
        # Transition from day to night
        $DayNightTimer.start(day_duration)
        is_day = false

        # Add your code here for night-specific actions or visual changes
    else:
        # Transition from night to day
        $DayNightTimer.start(night_duration)
        is_day = true

        # Add your code here for day-specific actions or visual changes 

Trong chức năng sẵn sàng, hãy khởi chạy DayNightTimer khi bắt đầu cảnh để bắt đầu chu kỳ ngày-đêm. Hàm \_on\_DayNightTimer\_timeout sẽ thực thi mỗi khi đồng hồ đếm ngược về 0, biểu thị sự chuyển đổi sắp xảy ra từ ngày sang đêm hoặc ngược lại.

Việc tuân thủ quy trình này sẽ dẫn đến đồng hồ hẹn giờ ngày-đêm hoạt động hoàn toàn, luân phiên liền mạch giữa ban ngày và ban đêm trong trò chơi Godot của bạn, từ đó cho phép bạn kết hợp các khía cạnh lối chơi đa dạng và các sửa đổi trực quan ấn tượng theo giờ hiện hành trong ngày.

Điều chỉnh nền cho ngày và đêm

Để nâng cao khả năng thể hiện trực quan chu kỳ ngày-đêm trong cảnh của bạn, điều quan trọng là phải kết hợp một phương pháp hiển thị sự chuyển tiếp từ ngày sang đêm một cách liền mạch. Một giải pháp hiệu quả liên quan đến việc sử dụng nút ColorRect để tạo phông nền thích hợp cho cả hai trường hợp. Bằng cách sử dụng kỹ thuật này, bạn sẽ linh hoạt hơn trong việc tạo ra các chuyển tiếp mượt mà và kiểm soát tốt hơn hình thức tổng thể của cảnh.

Để tạo phông nền động trong dự án Godot engine của bạn, trước tiên bạn nên giới thiệu đối tượng ColorRect trong cảnh. Phần tử này đóng vai trò là nền tảng có thể thích ứng cho các hiệu ứng hình ảnh khác nhau và chuyển tiếp giữa giờ ban ngày và buổi tối. Sau đó, nên đổi tên thành phần này thành nhãn mang tính mô tả hơn, chẳng hạn như “BackgroundRect” để nâng cao mức độ dễ đọc của nó. Cuối cùng, đảm bảo rằng “BackgroundRect” được định vị là lớp ưu việt bằng cách đặt nó trên toàn bộ khu vực canvas có thể nhìn thấy.

Trong bảng Thanh tra, định cấu hình thuộc tính Màu để phản ánh màu nền mong muốn của bạn, tượng trưng cho giờ ban ngày. Để đạt được điều này, hãy cân nhắc sử dụng một giá trị như Màu sắc (0,5, 0,5, 0,8), tương ứng với sắc thái dịu nhẹ của màu xanh lam gợi lên hình ảnh bầu trời ban ngày đầy nắng và tươi sáng.

Cập nhật cơ sở mã GDScript của bạn để tích hợp liền mạch với

 func _on_day_night_timer_timeout():
    if is_day:
        # Transition from day to night
        $DayNightTimer.start(day_duration)
        is_day = false

        # Add your code here for night-specific actions or visual changes

        # Update the background color to indicate day
        $BackgroundRect.color = Color(0.5, 0.5, 0.8) # Light blue for day
    else:
        # Transition from night to day
        $DayNightTimer.start(night_duration)
        is_day = true

        # Add your code here for day-specific actions or visual changes

        # Update the background color to indicate night
        $BackgroundRect.color = Color(0, 0, 0) # Black for night 

Sửa đổi giao diện của phần tử BackgroundRect bằng cách điều chỉnh màu sắc của nó dựa trên thời gian hiện tại trong ngày. Trong quá trình chuyển đổi từ ngày sang đêm, hãy thay đổi màu nền thành màu đen đậm để tạo bầu không khí tối. Ngược lại, vào ban ngày, hãy sử dụng màu xanh da trời dịu nhẹ làm màu nền.

/vi/images/day-background-in-godot-2d.jpg

Hiệu ứng âm thanh cho chu kỳ ngày đêm

Việc kết hợp thiết kế âm thanh hiệu quả là điều cần thiết để tạo ra trải nghiệm sống động trong chu kỳ ngày đêm của Godot. Việc tích hợp các tín hiệu âm thanh phù hợp nhằm nâng cao mức độ tương tác của người chơi bằng cách cung cấp phản hồi có ý nghĩa về những thay đổi của môi trường. May mắn thay, việc kết hợp các hiệu ứng âm thanh vào dự án Godot của một người có thể đạt được tương đối dễ dàng.

Đảm bảo rằng trước khi bắt đầu, bạn sở hữu tài sản âm thanh bao gồm các bản ghi âm mô tả hiện tượng thính giác cả ban ngày và ban đêm. Ví dụ, có thể tưởng tượng rằng bạn có thể sở hữu những giai điệu của loài chim đối với trường hợp trước và tiếng kêu của dế hoặc tiếng kêu của một con cú đối với trường hợp sau.

Để kết hợp các tín hiệu âm thanh trong dự án công cụ Godot của bạn, cần phải đưa hai phiên bản AudioStreamPlayer2D vào trong cảnh. Chúng nên được đặt tên phù hợp với các biệt danh phù hợp như “Âm thanh ban ngày” và “Âm thanh ban đêm”.

Sửa đổi mã GDScript để tạo điều kiện chuyển đổi âm thanh từ ngày sang đêm:

 func _on_day_night_timer_timeout():
    if is_day:
        # Transition from day to night
        $DayNightTimer.start(day_duration)
        is_day = false
     
        # Play daytime sounds
        $NighttimeSounds.stop() # Stop nighttime sounds
        $DaytimeSounds.play() # Start daytime sounds
         
    else:
        # Transition from night to day
        $DayNightTimer.start(night_duration)
        is_day = true

        # Play nighttime sounds
        $DaytimeSounds.stop() # Stop daytime sounds
        $NighttimeSounds.play() # Start nighttime sounds 

Khi hết thời gian hẹn giờ ngày-đêm, thuật toán này sẽ đánh giá trạng thái hiện tại và kích hoạt các tín hiệu âm thanh tương ứng để tạo điều kiện chuyển tiếp liền mạch giữa các pha.

Hãy thoải mái cá nhân hóa lựa chọn hiệu ứng âm thanh không có bản quyền của bạn để phù hợp với giai điệu và bầu không khí mà bạn mong muốn cho trò chơi của mình. Ngoài ra, bạn có thể linh hoạt kết hợp nhiều bản âm thanh hoặc sử dụng các hiệu ứng âm thanh khác nhau như hồi âm, tiếng vang, v.v. để tạo ra môi trường thính giác đắm chìm hơn.

Làm cho trò chơi Godot của bạn hấp dẫn hơn với chu kỳ ngày-đêm

Việc kết hợp chu kỳ ngày trong trò chơi Godot của bạn có thể nâng cao đáng kể mức độ hòa nhập và sự tham gia của người chơi. Sự bổ sung này không chỉ mang đến cho thế giới trò chơi một lớp hiện thực bổ sung mà còn cho phép giới thiệu cơ chế chơi trò chơi đa dạng và phát triển cũng như thúc đẩy các câu chuyện giàu trí tưởng tượng.

Hãy cân nhắc điều chỉnh chu kỳ ngày-đêm phù hợp với các chủ đề và cơ chế cụ thể của trò chơi, đồng thời khám phá các yếu tố hình ảnh và tương tác khác nhau có thể góp phần mang lại trải nghiệm chơi game hấp dẫn và lôi cuốn.