추가 단계
이 문서의 이 부분에서는 Fusion Animal Coop의 몇 가지 측면을 더 자세히 다루어, 이 샘플에 대한 추가 학습을 도울 것입니다.
장비
플레이어는 도끼로 나무를 베는 등, 세계와 상호작용하기 위해 장비를 사용합니다. 여기에는 아이템 줍기, 나무 흔들기, NPC와 대화하기와 같이 상황에 따른 행동을 하는 빈손 장비도 포함됩니다.
기본 Equipment 클래스는 장비 사용에 관한 모든 로직을 수행하는 Use
메서드를 정의합니다. 고유한 동작을 가진 ShovelEquipment
를 제외하면, 장비는 사용 가능하도록 InteractionType
및 RequiresInteractable
추상 속성만 구현하면 됩니다.
C#
[Networked, Capacity(8)] public NetworkLinkedList<Equipment> Equipments { get; }
[Networked, OnChangedRender(nameof(EquipmentIndexChanged))] public byte EquipmentIndex { get; set; }
public Equipment ActiveEquipment => Equipments.Get(EquipmentIndex);
Character.cs에서 장비 관련 코드 스니펫.
캐릭터에는 인스펙터에서 채워지는 NetworkLinkedList<Equipment>
가 있습니다. 현재 사용 중인 장비는 리스트의 인덱스로 지정되며, Get
메소드를 통해 확인됩니다. 두 속성 모두 네트워크로 동기화되어, 다른 플레이어들이 캐릭터가 어떤 장비를 착용했는지 정확하게 볼 수 있습니다.

장비 상호작용
각 장비는 앞서 언급된 InteractionType
에 해당하는 상호작용 유형을 정의합니다.
추상 클래스인 InteractionBase
는 인스펙터에 노출된 이벤트를 통해 간단하면서도 효과적으로 동작을 실행할 수 있는 수단을 제공합니다. 이 샘플의 상호작용 구현은 의도적으로 비워져 있으며, 기본 클래스의 Interact
메서드를 오버라이드 하여 맞춤 로직을 구현할 수 있음에도 불구하고 필요하지 않았습니다. 상호작용 스크립트의 유용성은 장비와 상호작용 간의 연관성 및 Unity의 GetComponent 메서드에서 비롯됩니다.
장비와 상호작용 모두 AnimationResponse를 선언하며, 상호작용의 AnimationResponse가 우선 적용되고, null인 경우에는 장비의 것이 대체로 사용됩니다.
AnimationResponse는 애니메이터 내 상태의 이름에 해당하는 문자열, 애니메이션의 지속 시간, 그리고 연관된 동작이 실행되기 전의 지연 시간을 포함합니다. 시간 값은 초 단위로 지정됩니다.
아이템
인벤토리 내에 존재할 수 있는 모든 객체는 InventoryItem
형태의 데이터 표현을 가집니다. 이는 아이템의 이름, 아이콘, 금전적 가치와 같은 외형적 및 기능적 측면을 설명합니다. 또한 이 데이터에는 아이템의 물리적 표현에 대한 참조와 해당 아이템으로 수행할 수 있는 모든 상호작용이 포함됩니다.

아이템 상호작용
아이템은 선택 시 인벤토리 화면에서 수행할 수 있는 다양한 상호작용 조합을 가질 수 있습니다. 스크립팅은 동작을 제공하고, 데이터는 아이템과 상호작용 간의 결합을 담당합니다. IItemInteraction
인터페이스를 구현하는 모든 클래스는 아이템의 상호작용 목록에 자동으로 추가됩니다.
C#
public interface IItemInteraction
{
public string ActionName { get; }
public bool CanPerformInteraction(Inventory inventory, InventoryItem item);
public void PerformInteraction(Inventory inventory, InventoryItem item);
}
IItemInteraction
인터페이스의 시그니처.
인벤토리
인벤토리는 NetworkLinkedList를 사용하여 아이템을 추적합니다. 이 리스트는 ID와 개수를 저장하는 "슬롯"을 포함합니다. 슬롯은 필요에 따라 추가 및 제거되며, InventoryItem
데이터 객체에 정의된 최대 스택 크기를 준수하여 개수가 수정됩니다. 아이템 ID는 특정 아이템에 대해 ID를 조회하거나 그 반대의 경우를 허용하는 양방향 딕셔너리를 제공하는 정적 접근 객체를 통해 확인됩니다.
커스터마이징
이 샘플은 INetworkStruct
의 커스텀 구현을 통해 색상 및 모델 교체 형태의 캐릭터 커스터마이징을 포함합니다. 이를 통해 하나의 네트워크 속성으로 모든 커스터마이징 옵션을 제어할 수 있어, 네트워크 처리량과 코드 크기를 최소화할 수 있습니다.
C#
public struct VisualData : INetworkStruct
{
public byte skinColor;
public byte topColor;
public byte bottomColor;
public byte hairColor;
public byte hairStyle;
public byte hat;
public byte accessory;
}
네트워크를 통해 전송되어야 하는 데이터양을 최소화하기 위해 byte 데이터 타입이 사용됩니다.
Back to top