This document is about: FUSION 2
SWITCH TO

3D & 2D 그리기


Available in the Industries Circle
Circle
Fusion 인더스트리 프로토타이핑 애드온

이 모듈은 3D 포인트를 동기화하여 라인 렌더러로 만든 3D 드로잉을 만드는 방법을 보여줍니다.

3D 그리기

원리

3D 드로잉은 라인 렌더 그룹으로 구성되며, 드로잉이 완료되면 잡고 이동할 수 있는 공통 핸들이 있습니다.

라인 렌더러는 로컬 기반 위치에 있으므로 핸들과 함께 이동할 수 있습니다.

그림은 여러 줄로 이루어집니다.

데이터 동기화는 데이터 동기화 헬퍼 애드온을 기반으로 합니다.

동기화된 데이터

Draw 클래스는 데이터 동기 헬퍼 애드온의 링 버퍼를 사용하여 드로잉 데이터를 저장합니다. 좀 더 정확하게 말하면 링 버퍼를 통과한 모든 데이터를 동기화하여 늦게 참여한 사람도 전체 드로잉을 받을 수 있도록 하는 헬퍼 버전인 RingBufferLosslessSyncBehaviour의 하위 클래스입니다.

링 버퍼는 DrawPoint 항목을 동기화합니다. DrawPoint에는 vector3과 float가 포함되며 float 값에 따라 의미가 달라집니다:

  • 양의 값은 정규 포인트를 나타냅니다. Vector3은 현재 라인에 추가할 점의 로컬 위치를 포함합니다.
  • NEW_LINE_PRESSURE(-1) 값은 선 변경을 의미합니다. Vector3에는 시작되는 선의 색상(r/g/b)이 포함되어 있습니다. 해당 점에 대해 새 선 렌더러가 생성됩니다.

이 프로토타이핑 코드에서는 모든 데이터가 Fusion 네트워크 속성에 저장되거나 신뢰할 수 있는 전송 API를 통해 동기화됩니다. 지속성을 포함한 실제 시나리오에서는 Fusion을 실시간 동기화에 사용하고 장기적인 데이터 지속성을 위해 타사 스토리지 서비스를 사용해야 합니다.

그리기

3D 펜에는 Draw 컴포넌트가 들어 있는 드로잉 프리팹을 스폰 하는 Draw 컴포넌트가 들어 있습니다. Draw 컴포넌트는 그린 모든 점이 Fusion을 통해 동기화되도록 합니다.

드로잉은 버튼(VR 컨트롤러의 트리거, 데스크톱의 공간)을 사용하여 트리거 됩니다.

2D 드로잉

원리

2D 드로잉은 (사용자에게) 보이지 않는 (사용자에게) 3D 드로잉이며, 렌더링 결과가 보드 질감에 투영되는 전용 카메라에 의해 기록됩니다.

성능을 위해 이 카메라는 보드 근처의 펜을 사용하거나 이 펜으로 만든 드로잉을 이동할 때만 활성화됩니다.

드로잉

드로잉은 보드 표면의 접촉, 접촉의 깊이가 도면의 폭을 결정함으로써 트리거 됩니다.

노트: 블로킹 팁 모듈 코드는 이 보드 감지와 유사점을 공유합니다. 향후 버전에서는 아마도 상호화될 것입니다.

색 선택

펜 색상 수정을 동기화하기 위해 ColorSelection 컴포넌트를 Drawer에 추가할 수 있습니다.
CheckColorModification() 메소드는 FixedUpdateNetwork 중에 호출되어 로컬 사용자가 조이스틱을 사용하여 펜 색상을 변경했는지 확인합니다.

C#

public override void FixedUpdateNetwork()
{
    if (Object == null || Object.HasStateAuthority == false) return;
    CheckColorModification();
}

이 경우 ChangePenColor()는 네트워크에 연결된 변수인 PenColor를 업데이트합니다. 그래서 OnColorChanged()는 (변경 탐지기 덕분에) 모든 플레이어에게 호출됩니다.

C#

[Networked]
public Color PenColor { get; set; }

public override void Render()
{
    base.Render();
    foreach(var changedVar in changeDetector.DetectChanges(this))
    {
        if (changedVar == nameof(PenColor))
        {
            OnColorChanged();
        }
    }
}

void OnColorChanged()
{
    UpdatePenMaterials();
}    
    

그러면 UpdatePenMaterials()는 펜의 재질을 업데이트하고 UpdateDrawColor()는 이전 드로잉을 종료하고 새로운 색상으로 새로운 드로잉을 시작합니다.

의존성

  • DataSyncHelpers 애드온
  • 접촉 차단 애드온
  • 대화형 메뉴 애드온
  • 피드백 애드온

데모

Assets\Photon\FusionAddons\Drawing\Demo\Scenes\ 폴더에 데모 씬이 있습니다.

Fusion Industries 2D Drawing

이 씬에는 여러 보드가 있는 2D 펜이 포함되어 있습니다:

  • 펜이 표면을 통과하는 것을 방지하기 위한 BlockingSurface 컴포넌트가 있는 첫 번째 간단한 정사각형 보드. 박스 콜라이더 IsTrigger bool이 true로 설정되어 있는지 확인합니다.
    차일드 카메라는 원근법으로 설정됩니다.
    또한 보드 카메라의 CullingMask에 3D 라인에 사용되는 레이어와 보드 배경(있는 경우)이 포함되어 있는지 확인합니다.
    마찬가지로 플레이어의 장비의 카메라에 보드 배경이 포함되지 않아야 합니다(카메라의 렌더 텍스처 덕분에 볼 수 있습니다).

  • 두 배 폭의 간단한 두 번째 보드.
    하위 카메라는 맞춤형으로 설정됩니다.
    카메라의 출력 텍스처는 정사각형 보드와 비교하여 2배 폭 해상도의 렌더 텍스처로 설정해야 합니다.

  • 배경 텍스처를 포함하는 비주얼을 가진 세 번째 보드. 위에서 설명한 바와 같이, 배경 텍스처의 게임 객체 레이어는 플레이어 리그 카메라에 포함되지 않아야 합니다(단, 보드의 카메라의 컬링 마스크에 포함되어야 합니다).
    이 보드에는 색상 선택 기능이 있는 3D 펜이 포함되어 있습니다.

펜을 놓으면 핀이 나타나 플레이어가 라인을 이동할 수 있습니다.

Fusion Industries 3D Drawing

씬에는 2개의 3D 펜도 포함되어 있습니다.
펜을 놓으면 핸들이 나타나 플레이어가 3D 라인을 이동할 수 있습니다.

다운로드

이 애드온의 최신 버전은 애드온 프로젝트에 포함되어 있습니다.

지원하는 토폴로지

  • 공유 모드

변경 이력

  • 버전 1.0.3: 피드백 네임스페이스 수정으로 인해 수정
  • 버전 1.0.2: LargeBoard를 시각적 프리패브로 추가
  • 버전 1.0.1: 데모 씬 + 프리팹 업데이트 + 네임스페이스 추가
  • 버전 1.0.0: 최초 릴리즈
Back to top