Files
BABA_YAGA/Assets/Scripts/Debug/PlayerDebugProvider.cs

87 lines
3.8 KiB
C#
Raw Normal View History

2026-03-26 20:27:19 +07:00
using UnityEngine;
using UnityEngine.InputSystem;
namespace OnlyScove.Scripts
{
public class PlayerDebugProvider : MonoBehaviour
{
[Header("References")]
2026-06-04 11:50:09 +07:00
// [SerializeField] private PlayerStateMachine stateMachine;
2026-03-26 20:27:19 +07:00
[Tooltip("Kéo cái Canvas (World Space) bạn đã thiết kế vào đây")]
[SerializeField] private GameObject debugCanvas;
[Header("Follow Settings")]
[SerializeField] private Vector3 followOffset = new Vector3(1.5f, 2f, 0f);
[SerializeField] private float smoothTime = 0.15f;
[SerializeField] private bool lookAtCamera = true;
// Các thuộc tính Public để bạn truy cập từ Script UI của bạn
2026-06-04 11:50:09 +07:00
// public string CurrentState => stateMachine != null ? stateMachine.CurrentStateName : "N/A";
// public string GroundedStatus => (stateMachine != null && stateMachine.IsGrounded) ? "YES" : "NO";
// public float HorizontalSpeed => stateMachine != null ? new Vector3(stateMachine.Controller.velocity.x, 0, stateMachine.Controller.velocity.z).magnitude : 0f;
// public float VerticalSpeed => stateMachine != null ? stateMachine.VelocityY : 0f;
//
// // Sửa lỗi truy cập InputReader từ StateMachine
// public Vector2 MoveInput => (stateMachine != null && stateMachine.Input != null) ? stateMachine.Input.MoveInput : Vector2.zero;
// public bool IsSprinting => (stateMachine != null && stateMachine.Input != null) ? stateMachine.Input.IsSprintHeld : false;
//
// public string TargetInteractable => stateMachine != null ? (stateMachine.GetInteractable()?.InteractionPrompt ?? "None") : "N/A";
//
// public IInteractable GetActiveInteractable() => stateMachine?.GetInteractable();
2026-04-05 00:08:43 +07:00
2026-06-04 11:50:09 +07:00
// public Vector3 GetInteractionPoint()
// {
// if (stateMachine == null || stateMachine.Scanner == null) return Vector3.zero;
// return stateMachine.Scanner.GetLastInteractionPoint(stateMachine.InteractionRange, stateMachine.InteractionMask);
// }
2026-04-01 02:41:07 +07:00
2026-03-26 20:27:19 +07:00
private Vector3 currentVelocity;
private Transform cameraTransform;
private bool isVisible = true;
2026-06-04 11:50:09 +07:00
// private void Awake()
// {
// if (stateMachine == null) stateMachine = GetComponent<PlayerStateMachine>();
// cameraTransform = Camera.main?.transform;
//
// if (debugCanvas != null) debugCanvas.SetActive(isVisible);
// }
2026-03-26 20:27:19 +07:00
private void Update()
{
// Toggle Visibility (Ctrl + Shift + B) sử dụng New Input System
if (Keyboard.current != null)
{
bool ctrl = Keyboard.current.leftCtrlKey.isPressed || Keyboard.current.rightCtrlKey.isPressed;
bool shift = Keyboard.current.leftShiftKey.isPressed || Keyboard.current.rightShiftKey.isPressed;
bool bDown = Keyboard.current.bKey.wasPressedThisFrame;
if (ctrl && shift && bDown)
{
isVisible = !isVisible;
if (debugCanvas != null) debugCanvas.SetActive(isVisible);
}
}
}
private void LateUpdate()
{
if (!isVisible || debugCanvas == null) return;
// 1. Damping Follow: UI đuổi theo Player
Vector3 targetPos = transform.position + followOffset;
debugCanvas.transform.position = Vector3.SmoothDamp(
debugCanvas.transform.position,
targetPos,
ref currentVelocity,
smoothTime
);
// 2. Billboard: Luôn nhìn về Camera
if (lookAtCamera && cameraTransform != null)
{
debugCanvas.transform.LookAt(debugCanvas.transform.position + cameraTransform.forward);
}
}
}
}