기본적인 차이점
[SyncVar] (단순형):
[SyncVar]
private int index = 0;
- 값이 변경되면 자동으로 모든 클라이언트에 동기화
- 별도의 추가 동작 없음
- 단순히 값만 업데이트
[SyncVar(hook = nameof(OnOuterwearIndexChanged))] (훅 포함):
[SyncVar(hook = nameof(OnOuterwearIndexChanged))]
private int index = 0;
void OnOuterwearIndexChanged(int oldValue, int newValue)
{
// 값이 변경될 때마다 실행되는 콜백
UpdateOuterwearAppearance(newValue);
}
주요 차이점
1. 콜백 함수 실행
- 훅 없음: 값만 조용히 변경
- 훅 있음: 값 변경 시 지정된 함수가 자동 실행
2. 사용 시나리오
// 훅 없는 경우 - 단순 데이터 동기화
[SyncVar]
private int playerScore = 0;
// 훅 있는 경우 - 변경 시 추가 동작 필요
[SyncVar(hook = nameof(OnHealthChanged))]
private int health = 100;
void OnHealthChanged(int oldHealth, int newHealth)
{
// UI 업데이트
healthBar.SetHealth(newHealth);
// 이펙트 재생
if (newHealth < oldHealth)
PlayDamageEffect();
}
3. 성능 고려사항
- 훅 없음: 더 가벼움, 단순한 값 동기화
- 훅 있음: 약간의 오버헤드, 하지만 필요한 경우가 많음
4. 실제 활용 예시
public class PlayerCustomization : NetworkBehaviour
{
// 단순 동기화만 필요
[SyncVar]
private int playerLevel = 1;
// 외모 변경 시 즉시 반영 필요
[SyncVar(hook = nameof(OnOuterwearChanged))]
private int outerwearIndex = 0;
void OnOuterwearChanged(int oldIndex, int newIndex)
{
// 3D 모델의 옷 변경
characterRenderer.material = outerwearMaterials[newIndex];
// 애니메이션 트리거
animator.SetTrigger("ChangeClothes");
}
}
결론: 값 변경 시 추가적인 동작(UI 업데이트, 외모 변경, 이펙트 등)이 필요하면 훅을 사용하고,
단순한 데이터 동기화만 필요하면 기본 SyncVar를 사용
'유니티 > 서버' 카테고리의 다른 글
미러 동기화 예제 코드 (0) | 2025.06.16 |
---|---|
Photon Fusion 2의 Authority (RpcSources, RpcTargets) (0) | 2025.06.16 |
미러 서버 코드 컨벤션 (0) | 2025.06.16 |
Mirror의 Remote Actions (0) | 2025.06.16 |
[통신] Meta Quest(메타 퀘스트)에서 USB 또는 Wi-Fi를 통해 PC와 연결하여 VR 스트리밍을 가능하게 하는 원리 (2) | 2025.06.13 |