Contents

Cách sử dụng nút RayCast2D để phát hiện đường ngắm trong Godot

Tính năng phát hiện đường ngắm sẽ tăng thêm độ phức tạp cho trò chơi của bạn bằng cơ chế cho phép các nhân vật hoặc vật thể nhận biết môi trường xung quanh. Bạn có thể sử dụng tính năng này cho hành vi AI của kẻ thù, cơ chế hiển thị của người chơi, lối chơi lén lút, v.v.

Trong Godot, việc triển khai tính năng phát hiện đường ngắm thông qua việc sử dụng nút RayCast2D vừa được sắp xếp hợp lý vừa hiệu quả.

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

Để bắt đầu làm việc với các nút RayCast2D trong Godot, trước tiên cần thiết lập môi trường chơi game hai chiều cơ bản. Điều này bao gồm việc tạo ra một nhân vật người chơi có khả năng di chuyển thông qua việc sử dụng đầu vào bàn phím, cũng như khả năng nhân vật tương tác với nhiều nền tảng khác nhau trong thế giới trò chơi.

Để bắt đầu thiết kế nhân vật người chơi trong Unity, hãy làm theo các bước sau:1. Tạo Cảnh trống bằng cách nhấp chuột phải vào cửa sổ Dự án và chọn “Cảnh”. Đặt tên nó là “PlayerCharacter” hoặc tương tự.2. Kéo GameObject mới vào bảng Phân cấp trong Cảnh mới được tạo này. Điều này sẽ đóng vai trò là đối tượng gốc cho nhân vật người chơi của chúng ta.3. Với GameObject gốc đã được chọn, hãy chuyển đến bảng Thanh tra và nhấp vào nút “Thêm thành phần” ở dưới cùng. Từ danh sách các thành phần có sẵn, hãy chọn “CharacterController2D” và nhấp vào “Thêm”. Thành phần này cần thiết cho mọi chuyển động của nhân vật 2D trong Unity.4. Tiếp theo, kéo một GameObject khác vào bảng Phân cấp từ bảng Nội dung. Lần này, chọn trước

Mã đi kèm 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ở để các nhà phát triển chia sẻ công việc của họ với người khác. Bộ mã cụ thể này được cấp phép theo các điều khoản của Giấy phép MIT, do đó cấp cho người dùng quyền sử dụng nó miễn phí.

Mã GDScript được cung cấp liên quan đến Phong trào Người chơi, như được biểu thị bằng tiêu đề của nó. Nó chứa một chức năng có tên là “di chuyển”, có vẻ như chịu trách nhiệm xử lý chuyển động của nhân vật dựa trên đầu vào của người dùng và các yếu tố khác như nhảy và leo trèo. Mã cũng sử dụng các biến bao gồm tốc độ ngang và dọc, gia tốc, trọng lực, v.v.

 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)

Để tạo điều kiện thuận lợi cho sự tương tác giữa người chơi và thế giới trò chơi, cần phát triển một loạt nền tảng tương tác trong bối cảnh. Chúng có thể được xây dựng bằng cách sử dụng các thành phần StaticBody2D, cung cấp nhiều tùy chọn khác nhau để xác định hình dạng của đối tượng. Bằng cách sắp xếp các yếu tố này một cách chu đáo, chúng tôi có thể tạo ra trải nghiệm nền tảng phong phú cho người dùng một cách hiệu quả.

/vi/images/simple-los-in-godot.jpg

Thiết lập RayCast2D

Để kết hợp tính năng phát hiện đường ngắm trong dự án của bạn bằng cách sử dụng Unity3D và GDScript, hãy làm theo các bước sau để tích hợp nút Raycast2D từ Godot Engine:

 var raycast: RayCast2D

func _ready():
    raycast = RayCast2D.new()
    add_child(raycast) 

Đảm bảo rằng bạn gắn tập lệnh này vào

Cung cấp phản hồi trực quan về tương tác tầm nhìn

Giờ đây, bạn có thể tạo thông báo khi trục thị giác của người chơi giao nhau với một bề mặt bằng cách phóng ra một chùm ánh sáng từ vị trí hiện tại của họ và hướng nó về quỹ đạo dự định của họ. Nếu tia này chiếu vào một thực thể, điều đó có nghĩa là người chơi có thể cảm nhận được nền tảng trong tầm nhìn của họ.

Kết hợp mã nói trên trong tập lệnh hiện có như sau:

 func _physics_process(delta):
    # ... (previous movement code)

    raycast.target_position = Vector2(100, 0)

    if raycast.is_colliding():
        print("Collided with platform!") 

Đây là đầu ra:

/vi/images/simple-raycast-in-godot.jpg

Mở rộng chức năng của RayCast2D

Việc sử dụng vô số chức năng cải tiến là điều tối quan trọng trong việc nâng cao mức độ tương tác và độ phức tạp trong trò chơi của một người lên một mức độ đặc biệt.

get_collider()

Việc sử dụng hàm get\_collider() cho phép người ta truy xuất thực thể ban đầu mà tia gặp phải. Nếu không có vật thể nào nằm trong quỹ đạo của tia, phương pháp này sẽ trả về giá trị rỗng, cung cấp thông tin có giá trị về việc không có chướng ngại vật trong tầm nhìn của người chơi.

 if raycast.is_colliding():
    var collided_object = raycast.get_collider()

    if collided_object:
        print("You can see:", collided_object.name) 

get_collider_rid()

Hàm get\_collider\_rid() cho phép truy xuất ID tài nguyên (RID) tương ứng với đối tượng va chạm đầu tiên trong hệ thống phát hiện va chạm, cung cấp thông tin có giá trị trong việc xác định đối tượng nào đã tiếp xúc trong quá trình chơi trò chơi hoặc các ứng dụng tương tác khác.

 if raycast.is_colliding():
    var collider_rid = raycast.get_collider_rid()

    if !collider_rid.is_valid():
        print("No valid object RID")
    else:
        print("Object RID:", collider_rid) 

get_collider_shape()

Hàm get\_collider\_shape() truy xuất mã định danh duy nhất được liên kết với dạng hình học của đối tượng chồng chéo ban đầu hoặc bằng 0 (0) trong trường hợp không xảy ra xung đột.

 if raycast.is_colliding():
    var collider_shape = raycast.get_collider_shape()

    if collider_shape == 0:
        print("No valid shape ID")
    else:
        print("Shape ID:", collider_shape) 

get_collision_normal()

Để hiểu sâu hơn về sự tương tác, việc sử dụng hàm get\_collision\_normal() sẽ cung cấp vectơ pháp tuyến của đối tượng tại điểm va chạm. Khi tia bắt nguồn từ bên trong hình dạng và điều kiện hit\_from\_inside được đáp ứng, giá trị bình thường được trả về bởi hàm này sẽ được biểu diễn dưới dạng một thể hiện Vector2 với giá trị x bằng 0 và giá trị y bằng 0.

 if raycast.is_colliding():
    var collision_normal = raycast.get_collision_normal()
    print("Collision Normal:", collision_normal) 

get_collision_point()

Khi gặp một đối tượng mà nó va chạm, hàm get\_collision\_point() sẽ xác định chính xác điểm xảy ra va chạm trong một hệ tọa độ được xác định toàn cục.

 if raycast.is_colliding():
    var collision_point = raycast.get_collision_point()
    print("Collision Point:", collision_point) 

Tận dụng các chức năng phức tạp của mô-đun RayCast2D, người ta có thể có được sự hiểu biết vô giá về sự tương tác giữa chùm tia chiếu và các vật thể cản trở trong cảnh.

Việc sử dụng các kỹ thuật này cho phép thu thập dữ liệu quan trọng có khả năng ảnh hưởng lớn đến cơ chế trong trò chơi, khả năng tương tác đối tượng và trải nghiệm người dùng.

Bao gồm các tính năng bổ sung

Ngoài khả năng phát hiện đường ngắm cơ bản, bạn có thể nâng cao các yếu tố động của trò chơi bằng cách kết hợp các chức năng nâng cao hơn.

Trình kích hoạt sự kiện

Thay vì chỉ hiển thị thông báo, bạn có thể bắt đầu các lần xuất hiện trò chơi cụ thể. Ví dụ: tiết lộ các tuyến đường bị che giấu, kích hoạt máy móc hoặc thông báo cho đối thủ về nơi ở của người chơi có thể nâng cao trải nghiệm chơi trò chơi.

Xử lý tắc nghẽn động

Để giải thích khả năng gây nhiễu đối với đường ngắm, điều cần thiết là phải kết hợp một cơ chế phát hiện động bất kỳ chướng ngại vật nào có thể cản trở việc tiếp nhận thị giác. Bằng cách đó, đường ngắm sẽ có thể điều chỉnh theo thời gian thực khi các vật thể đi vào hoặc rời khỏi tầm nhìn của người dùng.

Chỉ báo trực quan tùy chỉnh

Để tăng cường các tín hiệu văn bản truyền thống, người ta có thể phát triển các tín hiệu hình ảnh phù hợp nhằm nhấn mạnh kết nối tầm nhìn giữa người chơi và đồ vật. Những cải tiến như vậy có thể bao gồm việc thay đổi màu sắc của hình vẽ của nhân vật hoặc vật phẩm, thể hiện biểu tượng mang tính biểu tượng hoặc kích hoạt các thành phần hoạt hình phù hợp với các mối quan hệ này.

Cơ chế sương mù chiến tranh

Để nâng cao trải nghiệm cho các trò chơi thiên về chiến lược, nên triển khai cơ chế Fog of War. Những cơ chế này giới hạn tầm nhìn của người chơi cho đến khi tầm nhìn được thiết lập, từ đó dần dần hé lộ thế giới trò chơi và thúc đẩy các lựa chọn chiến lược chu đáo.

Các phương pháp thực hành tốt nhất để phát hiện đường ngắm

Tối ưu hóa khả năng phát hiện đường ngắm (LOS) là điều cần thiết để đảm bảo lối chơi liền mạch, vì nó giúp ngăn cản vật cản và đảm bảo rằng người chơi có thể nhìn thấy những gì họ cần để tương tác hoặc điều hướng xung quanh một cách hiệu quả. Việc làm theo các phương pháp hay nhất này sẽ giúp bạn đạt được mục tiêu này:

Tần số Raycast

Không thực hiện raycast liên tục trong mỗi lần lặp, trừ khi thực sự cần thiết. Thay vào đó, hãy cân nhắc việc kiểm tra khả năng hiển thị chỉ khi nơi ở của người chơi hoặc khung cảnh trải qua sự thay đổi đáng kể. Bằng cách đó, bạn có thể giảm thiểu các tính toán không cần thiết và tối ưu hóa hiệu suất.

Độ dài tia

Đảm bảo hiệu suất tối ưu bằng cách điều chỉnh thời lượng truyền sóng của bạn để chỉ bao phủ vùng được yêu cầu mà không gây ra tính toán quá mức. Các tia mở rộng quá mức có thể ảnh hưởng tiêu cực đến hiệu quả, do đó điều quan trọng là phải đạt được sự cân bằng giữa phạm vi bao phủ và gánh nặng tính toán.

Lớp va chạm

Sử dụng các lớp và mặt nạ va chạm để tinh chỉnh phạm vi của các đối tượng đang được xem xét để phát hiện đường ngắm, từ đó ngăn chặn các tia truyền bên ngoài hướng tới các thực thể không quan trọng.

Kết quả lưu vào bộ nhớ đệm

Khi thực hiện nhiều trường hợp phân tích tầm nhìn trên các đối tượng khác nhau hoặc trong các khung liên tiếp, bạn nên lưu trữ kết quả vào bộ đệm để tránh các tính toán không cần thiết.

Tích hợp cấp độ nền tảng

Đảm bảo rằng hệ thống phát hiện tầm nhìn của trò chơi gắn kết với thiết kế cấp độ nền tảng của trò chơi bằng cách tính đến các yếu tố như độ thẳng đứng của môi trường xung quanh, độ cao nền tảng khác nhau và mọi trở ngại có thể có đối với thị lực trong môi trường.

Đảm bảo rằng hệ thống phát hiện của bạn có khả năng tính toán những chi tiết phức tạp tinh tế có trong lối chơi để tạo điều kiện cho người chơi có được trải nghiệm dễ dàng gắn kết và thân thiện với người dùng.

Làm cho trò chơi Godot trở nên hấp dẫn hơn bằng tính năng phát hiện đường ngắm

Tính năng phát hiện tầm nhìn nâng cao độ sâu và tính thực tế của môi trường chơi game bằng cách cho phép người chơi lập kế hoạch, ẩn giấu bản thân hoặc vượt qua chướng ngại vật theo nhiều cách khác nhau tùy thuộc vào góc nhìn trực quan của họ. Bằng cách kết hợp yếu tố này, các nhà phát triển có thể biến một nền tảng thông thường thành một trải nghiệm hấp dẫn và hấp dẫn hơn, giúp tăng mức độ tương tác của người chơi và tạo ra những kỷ niệm lâu dài.