using UnityEngine; using Unity.Netcode; public class ConstructionSite : NetworkBehaviour { private NetworkVariable _currentTimer = new NetworkVariable(0f); private NetworkVariable _syncTurretIndex = new NetworkVariable(); private Vector3Int _gridPos; private float _targetBuildTime; private bool _isCompleted = false; public void Initialize(int index, Vector3Int pos) { if (!IsServer) return; _syncTurretIndex.Value = index; _gridPos = pos; _targetBuildTime = BuildManager.Instance.GetTurretData(index).buildTime; } void Update() { if (!IsServer || _isCompleted) return; _currentTimer.Value += Time.deltaTime; if (_currentTimer.Value >= _targetBuildTime) CompleteBuild(); } public void AdvanceConstruction(float amount) => AdvanceBuildRpc(amount); [Rpc(SendTo.Server, InvokePermission = RpcInvokePermission.Everyone)] private void AdvanceBuildRpc(float amount) => _currentTimer.Value += amount; private void CompleteBuild() { _isCompleted = true; var data = BuildManager.Instance.GetTurretData(_syncTurretIndex.Value); // [중요] 저장된 그리드 좌표로부터 정확한 월드 좌표 복원 Vector3 finalPos = BuildManager.Instance.GridToWorld(_gridPos); GameObject finalObj = Instantiate(data.finalPrefab, finalPos, Quaternion.identity); finalObj.GetComponent().Spawn(); GetComponent().Despawn(); } }