This document is about: FUSION 1
SWITCH TO

수정중인 페이지 입니다.

Metaverse 아트 갤러리


Available in the Industries Circle
Circle

개요

아트 갤러리 공간은 API를 사용하여 작품을 동적으로 표시하는 방법에 대한 예입니다. 플레이어는 검색 필드를 사용하고 키워드를 입력하여 작품을 찾고 갤러리 월에 전시할 수 있습니다. 이를 위해, 우리는 Art Institute of Chicago API를 사용하여 박물관의 공개 데이터를 탐색하고 전시합니다.

Art Institute of Chicago API가 선택된 이유는 다음과 같습니다:

  • API가 잘 되어 있습니다.(http://api.artic.edu/docs/)
  • 예술품들의 품질이 높습니다
  • CC0 콘텐츠 필터링이 가능합니다
fusion metaverse art gallery

ArticDisplay

아트웍 플레이스 홀더는 갤러리의 월에 미리 정의된 위치로 배치되었습니다. 그림뿐만 아니라 그림에 대한 정보(제목, 작가, 설명)도 표시합니다. 작업의 실제 크기 또는 더 큰 크기를 표시하는 버튼도 있습니다.

fusion metaverse art gallery

각 아트 홀더는 ArticDisplay 클래스에 의해 관리되며 아트의 모든 매개변수는 ArticArtwork라는 네트워크 구조체에 등록됩니다.

C#

public struct ArticArtwork : INetworkStruct
{
    public NetworkBool isVisible;
    public int id;
    public NetworkString<_64> image_id;
    public NetworkString<_128> title;
    public NetworkString<_128> artist_display;
    public Vector2 dimension;
...
}

아트워크 속성이 변경되는 즉시 OnArticArtworkChanged() 메소드를 호출하여 디스플레이를 업데이트합니다.

C#

[Networked(OnChanged = nameof(OnArticArtworkChanged))]
public ArticArtwork articArtwork { get; set; }

static void OnArticArtworkChanged(Changed<ArticDisplay> changed)
{
    changed.Behaviour.OnArticArtworkChanged();
}

private void OnArticArtworkChanged()
{
    if (articArtwork.isVisible)
        DisplayArtWork();
    else
        HideArtWork();
}

SearchManager

갤러리 입구에 검색 패널이 설치되어 있습니다. 보다 쉽게 사용할 수 있도록 미리 정의된 검색을 위한 일부 단추가 추가되었습니다.

fusion metaverse art gallery

플레이어가 이 사전 정의된 버튼 중 하나를 누르면 사전 정의된 단어가 매개 변수에 포함된 SearchManager LaunchPredefinedSearch() 메소드가 호출됩니다. 키보드로 키워드를 입력하고 검색 버튼을 사용하면LaunchSearch() 메소드를 호출합니다.

검색 키워드는 네트워크에서 동기화됩니다. UI에 유용할 뿐만 아니라 두 명의 사용자가 동일한 검색을 수행할 경우 리소스 소비(대역폭 및 API)를 방지하는 데도 유용합니다.

C#

[Networked(OnChanged = nameof(OnKeywordChanged))]
public NetworkString<_128> keyword { get; set; }

static void OnKeywordChanged(Changed<SearchManager> changed)
{
    changed.Behaviour.OnKeywordChanged();
}

private void OnKeywordChanged()
{
    keywordInputField.Text= keyword.ToString();
}

검색이 시작되면(비동기적인 DoLaunchSearch() 작업) StateAuthority 먼저 요청하고 플레이어에 대한 검색 키워드를 동기화합니다. 그런 다음 ArticGalleryManager에게 매개 변수로 전달된 문자열을 검색하도록 요청합니다. 이렇게 하면 모든 플레이어가 검색된 키워드를 보더라도 한 명의 플레이어만 검색을 수행한다는 의미입니다.

C#


public async Task DoLaunchSearch() 
{
    await PrepareSearch();
    articGalleryManager.LaunchSearch(keyword.ToString());
}

public async Task PrepareSearch()
{
    if (Object.StateAuthority != Runner.LocalPlayer)
    {
        if (!await Object.WaitForStateAuthority()) return;
    }

    // sync the keyword
    keyword = keywordInputField.Text.Trim();
...
}

ArticGalleryManager

ArticGalleryManagerArt Institute of Chicago 라이브러리에서 키워드를 이용해 항목을 검색하고 그 결과를 아트 플레이스 홀더에 표시하는 역할을 맡고 있습니다. 이를 위해 장면의 모든 ArticDisplay 목록이 Awake() 중에 초기화됩니다.

LaunchSearch 작업 중에는 ArticSearchRequest 메소드를 사용해 적절한 미술품을 찾습니다. 결과는 artworkDescriptions 목록에 기록되고 FillDisplayFound() & FillDisplayAsync() 함수 덕분에 표시됩니다:

  • FindMostFittingDisplay()는 적합한 아트 홀더(다른 월보다 큰 월을 수용할 수 있는 월도 있음)를 찾는 역할을 합니다.
  • FillDisplayAsync()는 API에서 수신한 데이터로 아트웍 속성을 업데이트한 후 아트웤 플레이스 홀더에 StateAuthority를 요청하고 네트워크를 통해 동기화합니다.

C#

async Task FillDisplayAsync(ArticData data, ArticDisplay display, string iiif_url)
{
    ArticArtwork articArtWorkTemp = new ArticArtwork();
    articArtWorkTemp.isVisible = true;
    articArtWorkTemp.title = data.title;
    articArtWorkTemp.artist_display = data.artist_display;
    articArtWorkTemp.id = data.id;
    articArtWorkTemp.image_id = data.image_id;
    articArtWorkTemp.dimension = data.ParsedDimensions;

    // GET authority on the ArticDisplay
    if (display.Object.StateAuthority != display.Runner.LocalPlayer)
    {
        if (!await display.Object.WaitForStateAuthority()) return;
    }
...
    // sync the artwork
    display.articArtwork = articArtWorkTemp;
...
}

ArticAPIManager

ArticAPIManager 클래스는 Art Institute of Chicago API를 관리합니다. Fusion SDK에 대한 종속성은 없습니다.

API 문서는 여기에서 확인할 수 있습니다.

Back to top