using Unity.Netcode; using UnityEngine; namespace Northbound { /// /// 건물에 데미지를 주는 테스트/공격 시스템 /// public class BuildingDamageTest : MonoBehaviour { [Header("Damage Settings")] public int damageAmount = 10; public float damageInterval = 1f; public KeyCode damageKey = KeyCode.F; [Header("Target")] public float maxDistance = 10f; public LayerMask buildingLayer; private float _lastDamageTime; private void Update() { if (Input.GetKeyDown(damageKey)) { TryDamageBuilding(); } // 자동 데미지 (테스트용) if (Input.GetKey(KeyCode.LeftShift) && Input.GetKey(damageKey)) { if (Time.time - _lastDamageTime >= damageInterval) { TryDamageBuilding(); _lastDamageTime = Time.time; } } } private void TryDamageBuilding() { // 카메라에서 레이캐스트 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out RaycastHit hit, maxDistance, buildingLayer)) { Building building = hit.collider.GetComponentInParent(); if (building != null) { ulong attackerId = NetworkManager.Singleton != null && NetworkManager.Singleton.IsClient ? NetworkManager.Singleton.LocalClientId : 0; building.TakeDamage(damageAmount, attackerId); Debug.Log($"[Test] {building.buildingData?.buildingName ?? "건물"}에게 {damageAmount} 데미지!"); } } } private void OnGUI() { GUILayout.BeginArea(new Rect(10, 10, 300, 100)); GUILayout.Label($"[{damageKey}] 건물에 {damageAmount} 데미지"); GUILayout.Label($"[Shift + {damageKey}] 연속 데미지"); GUILayout.EndArea(); } } }