체력바 추가
플레이어는 상시 표시, 나머지는 체력 변경 시 표시
This commit is contained in:
@@ -6,7 +6,7 @@ using UnityEngine.InputSystem;
|
||||
using Unity.Cinemachine;
|
||||
using Northbound;
|
||||
|
||||
public class NetworkPlayerController : NetworkBehaviour, ITeamMember, IDamageable
|
||||
public class NetworkPlayerController : NetworkBehaviour, ITeamMember, IDamageable, IHealthProvider
|
||||
{
|
||||
[Header("Movement Settings")]
|
||||
public float rotationSpeed = 10f;
|
||||
@@ -22,6 +22,10 @@ public class NetworkPlayerController : NetworkBehaviour, ITeamMember, IDamageabl
|
||||
[SerializeField] private GameObject resourcePickupPrefab; // 자원 드랍 프리팹
|
||||
[SerializeField] private float respawnDelay = 10f; // 부활 대기 시간 (초)
|
||||
|
||||
[Header("Health Bar")]
|
||||
[SerializeField] private bool showHealthBar = true;
|
||||
[SerializeField] private GameObject healthBarPrefab;
|
||||
|
||||
// 이 플레이어를 제어하는 클라이언트 ID (서버 소유권이지만 논리적 소유자)
|
||||
private NetworkVariable<ulong> _ownerPlayerId = new NetworkVariable<ulong>(
|
||||
ulong.MaxValue,
|
||||
@@ -47,6 +51,7 @@ public class NetworkPlayerController : NetworkBehaviour, ITeamMember, IDamageabl
|
||||
private Animator _animator;
|
||||
private NetworkAnimator _networkAnimator;
|
||||
private PlayerStats _playerStats;
|
||||
private UnitHealthBar _healthBar;
|
||||
|
||||
// 이 플레이어가 로컬 플레이어인지 확인
|
||||
|
||||
@@ -88,6 +93,12 @@ public class NetworkPlayerController : NetworkBehaviour, ITeamMember, IDamageabl
|
||||
_currentHealth.OnValueChanged += OnHealthChanged;
|
||||
_ownerPlayerId.OnValueChanged += OnOwnerPlayerIdChanged;
|
||||
|
||||
// 체력바 생성
|
||||
if (showHealthBar && healthBarPrefab != null)
|
||||
{
|
||||
CreateHealthBar();
|
||||
}
|
||||
|
||||
// 이미 로컬 플레이어로 설정되어 있으면 입력 초기화
|
||||
TryInitializeLocalPlayer();
|
||||
}
|
||||
@@ -443,6 +454,12 @@ public class NetworkPlayerController : NetworkBehaviour, ITeamMember, IDamageabl
|
||||
|
||||
private void OnHealthChanged(int previousValue, int newValue)
|
||||
{
|
||||
// 체력바 업데이트
|
||||
if (_healthBar != null)
|
||||
{
|
||||
_healthBar.UpdateHealth();
|
||||
}
|
||||
|
||||
if (IsLocalPlayer)
|
||||
{
|
||||
// UI 업데이트 등
|
||||
@@ -451,6 +468,29 @@ public class NetworkPlayerController : NetworkBehaviour, ITeamMember, IDamageabl
|
||||
|
||||
#endregion
|
||||
|
||||
#region Health Bar
|
||||
|
||||
private void CreateHealthBar()
|
||||
{
|
||||
if (_healthBar != null)
|
||||
return;
|
||||
|
||||
if (healthBarPrefab == null)
|
||||
return;
|
||||
|
||||
GameObject healthBarObj = Instantiate(healthBarPrefab, transform);
|
||||
_healthBar = healthBarObj.GetComponent<UnitHealthBar>();
|
||||
|
||||
if (_healthBar != null)
|
||||
{
|
||||
// 플레이어 체력바는 상시 표시
|
||||
_healthBar.hideWhenFull = false;
|
||||
_healthBar.Initialize(this);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Gizmos
|
||||
|
||||
private void OnDrawGizmosSelected()
|
||||
|
||||
Reference in New Issue
Block a user