Hệ thống Tương tác theo Ngữ cảnh

Tags:
Gameplay
Interaction
Player
Architecture
Interface

C# Code

/* --- IInteractable.cs (Interface) --- */
public interface IInteractable
{
    void Interact();
    string GetInteractText();
}

/* --- PlayerInteraction.cs (Gắn vào Player) --- */
using UnityEngine;
using TMPro;

public class PlayerInteraction : MonoBehaviour
{
    public Camera playerCamera;
    public float interactionDistance = 3f;
    public TextMeshProUGUI interactionText;
    private IInteractable currentInteractable;

    void Update()
    {
        RaycastHit hit;
        bool hasHit = Physics.Raycast(playerCamera.transform.position, playerCamera.transform.forward, out hit, interactionDistance);

        if (hasHit && hit.collider.GetComponent<IInteractable>() != null)
        {
            currentInteractable = hit.collider.GetComponent<IInteractable>();
            interactionText.text = currentInteractable.GetInteractText();
            interactionText.gameObject.SetActive(true);

            if (Input.GetKeyDown(KeyCode.E))
            {
                currentInteractable.Interact();
            }
        }
        else
        {
            currentInteractable = null;
            interactionText.gameObject.SetActive(false);
        }
    }
}

/* --- Door.cs (Ví dụ vật tương tác) --- */
using UnityEngine;

public class Door : MonoBehaviour, IInteractable
{
    private bool isOpen = false;

    public string GetInteractText()
    {
        return isOpen ? "Press E to Close Door" : "Press E to Open Door";
    }

    public void Interact()
    {
        isOpen = !isOpen;
        Debug.Log(isOpen ? "Door Opened" : "Door Closed");
        // Thêm logic animation mở/đóng cửa ở đây
    }
}

Một hệ thống cho phép người chơi tương tác với nhiều loại đối tượng (cửa, NPC, vật phẩm) chỉ bằng một nút bấm khi ở trong tầm.

Bình luận (0)

Bạn cần đăng nhập để có thể bình luận.

Chưa có bình luận nào. Hãy là người đầu tiên!

Bài viết liên quan

Một hệ thống linh hoạt cho phép người chơi tương tác với nhiều loại đối tượng (cửa, vật phẩm, NPC, công tắc) chỉ bằng một nút bấm (E) khi ở trong tầm, kèm hiển thị gợi ý trên màn hình.

Interaction
Gameplay
Player
Architecture
Interface
UI

Cho phép người chơi đẩy các vật thể có Rigidbody khi di chuyển vào chúng. Lực đẩy có thể điều chỉnh được.

Physics
Interaction
Player
Gameplay

AI sẽ phát hiện người chơi trong một phạm vi nhất định và bắt đầu di chuyển về phía họ. Khi người chơi ra khỏi phạm vi, AI sẽ dừng lại.

AI
Movement
Gameplay
Player

Tạo một viên đạn (projectile) tại một điểm và bắn nó đi theo một hướng xác định. Thường dùng cho nhân vật hoặc kẻ địch.

Gameplay
Player
Spawning
Physics

Cho phép nhân vật thực hiện một cú lướt nhanh theo hướng di chuyển hiện tại. Có cooldown để tránh lạm dụng.

Player
Movement
Gameplay
Coroutine

Sử dụng Input System mới của Unity để di chuyển nhân vật 2D hoặc 3D một cách hiệu quả và linh hoạt.

2D
3D
Input
Gameplay
Player

Ví dụ cách sử dụng các tham số Trigger, Bool và Float (cho Blend Tree) để điều khiển các trạng thái animation của nhân vật.

Animation
Animator
Player
Gameplay

Theo dõi các đòn đánh liên tiếp để thực hiện chuỗi combo. Reset combo nếu người chơi không tấn công kịp thời.

Gameplay
Player
Combat

Một hệ thống đơn giản để hiển thị các đoạn hội thoại có nhiều câu và lựa chọn cho người chơi, sử dụng ScriptableObject.

UI
Gameplay
Interaction
ScriptableObject

Một hệ thống kho đồ cơ bản sử dụng ScriptableObject cho dữ liệu vật phẩm và quản lý các ô chứa trong UI.

UI
Gameplay
Inventory
ScriptableObject
Architecture