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; // BuildManager로부터 데이터 참조 _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 = transform.position; GameObject finalObj = Instantiate(data.finalPrefab, finalPos, Quaternion.identity); finalObj.GetComponent().Spawn(); GetComponent().Despawn(); } }