레거시 아바타
이 아바타 애드온은 아바타 관련 기능을 지원하기 위한 공통 기반과 사용자가 자신만의 아바타를 커스터마이징할 수 있는 간단한 아바타 시스템을 제공합니다.
아바타
AvatarRepresentation
클래스는 다음과 같은 기능을 제공합니다:
- 아바타의 이름 또는 URL이 포함된
UserInfo
변경 구독 - 주어진 URL에 적합한 아바타 시스템 선택
- LOD(자세한 내용은 "LOD 지원" 참고) 지원
IAvatar
인터페이스를 통한 아바타의 공통 속성 정의 (색상, 헤어 등)NetworkRig
게임 오브젝트의 자식 오브젝트 중IAvatarRepresentationListener
를 구현한 오브젝트 및,RigInfo
시스템이 구성된 경우HardwareRig
자식들에게도 아바타 로딩 완료 이벤트 브로드캐스트
LOD 지원
AvatarRepresentation
와 같은 계층에 LODGroup
을 추가할 경우 다음 기능이 제공됩니다:
- 아바타 시스템이 동적으로 생성한 렌더러를 LODGroup에 추가 및 제거
- 아바타가 로딩 중이거나 URL이 잘못된 경우, 높은 수준의 LOD를 표시 (
loadingMode
에 따라, 기본은 원격 사용자에만 적용) IgnoreDistance
메서드를 통해 LODGroup 활성화 여부 제어
아바타 표현 리스너
애드온은 아바타 로딩 시 반응할 수 있는 IAvatarRepresentationListener
를 구현한 여러 컴포넌트를 제공합니다.
로컬 아바타 컬링
로컬 아바타 컬링 시스템은 로컬 사용자에게 자신의 아바타를 숨기기 위한 시스템입니다.
이를 위해 하드웨어 리그에 저장된 카메라의 컬링 마스크를 변경하여, 특정 레이어를 숨기고 이 레이어를 로컬 사용자에게 연결된 아바타에 적용합니다.
로컬 아바타 컬링을 위해서는 HardwareRig
게임 오브젝트에 LocalAvatarCulling
스크립트를 추가해야 합니다.
기능을 활성화하려면 RigInfo
시스템이 필요하며 다음 구성이 필요합니다:
NetworkRunner
오브젝트에RigInfo
추가NetworkRig
오브젝트 및HardwareRig
오브젝트 각각에RigInfoRegister
추가
손 표현 관리자
NetworkHandRepresentationManager
및 HardwareHandRepresentationManager
는 손 표현의 온라인 및 오프라인 상태를 관리하기 위한 선택적 컴포넌트입니다.
이들의 주요 목적은 아바타의 피부색을 기반으로 손을 색칠하는 기능을 제공하는 것입니다.
또한, 연결 상태, 아바타 시스템 내 손 구성 여부 등에 따라 손의 외형을 제어할 수 있는 다양한 옵션을 제공합니다.
하드웨어 손에는 장식 시스템도 있으며, 예를 들어 시계와 같은 일부 오프라인 손 구성 요소가 네트워크 손의 보간 대상에 따라 움직이도록 할 수 있습니다.
이 시스템은 네트워크 손이 표면에 막혀 움직이지 못할 때 유용합니다.
로우 폴리 심플 아바타
LowPolySimpleAvatar
는 사용자가 선택한 아바타에 따라 LODGroup에서 사용할 로우 폴리 아바타를 구성하는 역할을 합니다.
(간단한 아바타 모델 또는 Ready Player Me 모델을 사용할 수 있음)
이 클래스는 AvatarRepresentation
의 OnRepresentationAvailable
콜백을 사용하여 다음 작업을 수행합니다:
- 선택한 아바타에 따라 로우 폴리 아바타의 신체, 머리카락, 의상 색상 재질 구성
- 간단한 아바타 모델일 경우, 해당 모델에 맞는 머리카락 LOD 메시를 구성
간단한 아바타

이 애드온에는 사용자가 자신의 아바타를 구성하는 다양한 매개변수(피부색, 의상 메시, 머리카락 재질 등)를 선택할 수 있는 간단한 아바타 시스템이 포함되어 있습니다.
SimpleAvatar
클래스는 다음 기능을 제공합니다:
- 새로운 "simple avatar" URL을 통해 아바타 변경
- 무작위 "simple avatar" 모델 생성
- 특정 아바타 매개변수 구성 (머리카락, 옷, 피부 등)
- 눈과 입 애니메이션
또한 새로운 simple avatar가 로드되면 AvatarRepresentation
에게 RepresentationAvailable
메서드를 통해 알립니다.
데모 씬은 Assets\Photon\FusionAddons\Avatar\Demo\Scenes\
폴더에 있습니다.
간단한 아바타를 테스트하려면 AvatarLODSimpleAvatar
씬을 열어 보세요.
사용자가 생성되면 SimpleAvatarNetworkRig(Clone)
오브젝트를 선택하고 UserInfo
의 AvatarURL
속성을 변경하세요.
예시 URL: simpleavatar://?hairMesh=1&skinMat=2&clothMat=0&hairMat=0&clothMesh=1
눈 움직임 시뮬레이션
아바타가 고정된 눈동자를 표시하지 않도록, 눈 움직임 시뮬레이션 시스템을 사용할 수 있습니다.
이 시스템은 눈(오브젝트)을 GazeTarget
을 가진 다른 오브젝트를 추적하도록 움직입니다.
구현 방법:
- 씬에
GazeInfo
컴포넌트가 있어야 하며, 이는 백그라운드 스레드에서 새로운 시선 타깃을 주기적으로 계산합니다. - 아바타 오브젝트에는
Gazer
컴포넌트를 추가하고,gazingTransforms
에 눈 오브젝트를 등록해야 합니다. (gazingTransformOffsets
를 통해 회전 오프셋을 추가할 수도 있습니다) - 성능 향상을 위해,
eyeRendererVisibility
필드에RendererVisible
을 제공할 수 있습니다. 아바타 렌더러가 보이지 않으면 눈 시뮬레이션은 실행되지 않습니다.
Oculus 입 모양 동기화
일부 아바타 시스템은 고급 입 모양 동기화가 필요할 수 있습니다. 이를 위해 이 아바타 애드온에는 Oculus Lipsync 라이브러리 버전이 포함되어 있으며, Oculus Audio SDK 라이선스(https://developer.oculus.com/licenses/audio-3.3/) / Meta Platform Technologies SDK 라이선스(https://developer.oculus.com/licenses/oculussdk/)에 따라 제공됩니다.
라이브러리는 Oculus Integration 패키지에 포함되어 있습니다.
의존성
- Text Mesh Pro (사용자 이름표 표시용)
- Photon Voice SDK
지원되는 토폴로지
- 공유 모드
변경 로그
- 버전 2.0.3: 정확한 타입의 무작위 아바타 추가
- 버전 2.0.2: 무작위 아바타 로딩 지원
- 버전 2.0.1: 손 메시 애니메이션 제거 (하드웨어 손으로 이동됨)
- 버전 2.0.0: Fusion 2.0 지원
- 버전 1.0.2: UserName 및 AvatarURL에 NetworkString 사용
- 버전 1.0.1: LookAtCamera의 네임스페이스 수정
- 버전 1.0.0: 최초 릴리즈