{!See https://docs.google.com/document/d/1takg_GmIBBKKTj-GHZCwzxohpQz7Bhekivkk72kYMtE/edit for reference implementation of OneTrust, dataLayer and GTM} {!OneTrust Cookies Consent} {!OneTrust Cookies Consent end} {!dataLayer initialization push} {!dataLayer initialization push end} {!Google Tag Manager} {!Google Tag Manager end} 주석 마커 샘플 | Timeline | 1.6.3
docs.unity3d.com
"{0}"의 검색 결과

    목차 표시/숨기기

    주석 마커 샘플

    주석 샘플은 타임라인의 북마크로 사용할 수 있는 마커를 제공합니다.

    주석

    주석에서 이용 가능한 옵션은 다음과 같습니다. 필드 | 설명 --- | --- Title | 주석의 제목입니다. 주석에 마우스 커서를 올려 놓으면 툴팁으로 표시됩니다. Color | 타임라인 창에서 주석의 컬러입니다. Show line overlay | 이 옵션을 사용하면 타임라인 창의 전체 높이에 걸쳐 수직선을 표시할 수 있습니다.

    커스텀 마커 워크플로 예제

    이 예제는 다음에 대한 방법을 보여줍니다.

    • 커스텀 마커 만들기
    • MarkerEditor를 사용하여 마커 커스터마이즈
    • 커스텀 USS 스타일을 사용하여 마커 그리기
    • Actions를 사용하여 커맨드 추가

    1. 주석 마커 만들기

    마커는 타임라인 에셋에 추가할 수 있는 항목으로, 특정 시점을 나타내는 데 사용됩니다. 또한 마커에는 클립(활성화 클립, 오디오 클립, 애니메이션 클립 등)과 마찬가지로, 특수 마커가 있습니다.

    새 타입의 마커를 추가하려면 Marker 클래스를 상속하는 클래스를 만들기만 하면 됩니다.

    public class AnnotationMarker : UnityEngine.Timeline.Marker {}
    

    이제 이 커스텀 마커를 모든 트랙 또는 타임라인 마커 영역에 추가할 수 있습니다.

    타임라인에 추가된 새 마커

    주석에 제목, 설명, 컬러를 추가할 수 있습니다.

    public class AnnotationMarker : Marker
    {
        public string title;
        public Color color;
        public string description;
        public bool showLineOverlay;
    }
    

    이제 주석 마커 자체가 완성되었습니다. 하지만 커스터마이징 작업은 아직 완료되지 않았습니다. 타임라인은 많은 커스터마이징 기능을 제공합니다.

    2. 마커의 형상 커스터마이즈

    마커의 형상은 USS 스타일 또는 MarkerEditor를 사용하여 커스터마이즈할 수 있습니다. 두 방법 모두 저마다 장단점이 있습니다.

    커스텀 USS 스타일

    마커는 USS 스타일을 사용하여 형상을 지정할 수 있습니다. 커스텀 USS 스타일을 만드는 방법에 대한 자세한 내용은 커스텀 USS 스타일을 정의하는 방법을 참조하십시오.

    CustomStyle 속성을 사용하면 특정 마커의 스타일을 지정할 수 있습니다.

    [CustomStyle("AnnotationStyle")]
    public class AnnotationMarker : Marker
    {
        //...
    }
    

    AnnotationStyle은 USS 스타일시트에 정의되어 있으며, 화면에 마커가 표시될 때 사용됩니다.

    커스텀 스타일

    USS 스타일은 텍스처 아이콘만 사용하는 경우와 같이 원하는 형상이 단순할 때 유용합니다. 마커의 컬러를 동적으로 변경하는 것과 같이 더 복잡한 작업에는 MarkerEditor가 필요합니다.

    커스텀 에디터

    MarkerEditor를 사용하여 에디터의 마커 기능을 강화할 수 있습니다. 이 에디터는 커스텀 인스펙터 역할을 합니다. 즉 CustomTimelineEditor 속성을 사용하여 타임라인에 MarkerEditor 클래스를 특정 마커에 연결해야 함을 알릴 수 있습니다.

    [CustomTimelineEditor(typeof(AnnotationMarker))]
    public class AnnotationMarkerEditor : MarkerEditor
    {
       //...
    }
    

    마커 정보

    MarkerEditor를 사용하면 GetMarkerOptions 메서드를 오버라이드하여 마커에 대한 정보를 제공할 수 있습니다.

    public override MarkerDrawOptions GetMarkerOptions(IMarker marker)
    {
       var annotation = marker as AnnotationMarker;
       if (annotation != null)
       {
          return new MarkerDrawOptions { tooltip = annotation.title };
       }
       return base.GetMarkerOptions(marker);
    }
    

    여기에서 Annotation의 툴팁은 주석의 title 변수를 사용하도록 설정되었습니다.

    마커 툴팁

    MarkerDrawOptions는 마커에 오류 텍스트를 설정할 수도 있습니다. 이는 변수가 잘못 설정되어 주의가 필요한 경우에 유용합니다.

    오버레이

    오버레이는 DrawOverlay 메서드를 오버라이드하여 마커 위에 그릴 수 있습니다.

    public override void DrawOverlay(IMarker marker, MarkerUIStates uiState, MarkerOverlayRegion region)
    {
        var annotation = marker as AnnotationMarker;
        if (annotation != null)
        {
            //Draw overlay code...
        }
    }
    

    오버레이는 마커 위에 그려집니다. 즉 USS 스타일이 먼저 그려지고, 이후에 DrawOverlay가 호출됩니다. Annotation의 경우 DrawOverlay를 사용하여 마커의 컬러를 변경하고, 타임라인 창의 전체 높이에 걸쳐 라인을 그릴 수 있습니다. 이렇게 하기 위해 region에서 제공된 정보를 사용할 수 있습니다. 표시되는 시간 범위 외에도 MarkerOverlayRegion은 그릴 위치를 파악하는 데 사용할 수 있는 두 개의 직사각형을 제공합니다.

    • markerRegion

    markerRegion은 마커를 둘러싸는 직사각형으로, 마커 자체에 직접 무언가를 그릴 때 유용합니다. Annotation의 경우 이 직사각형은 컬러 오버레이를 그리는 데 사용됩니다.

    마커 영역

    • timelineRegion

    timelineRegion은 타임라인 창의 클립과 마커 영역을 둘러싸는 직사각형으로, Annotation의 라인 오버레이와 같이 마커 영역에 무언가를 그리는 데 유용합니다.

    타임라인 영역

    const float k_LineOverlayWidth = 6.0f;
    float markerRegionCenter = markerRegion.xMin + (markerRegion.width - k_LineOverlayWidth) / 2.0f;
    Rect lineRect = new Rect(markerRegionCenter,
        timelineRegion.y,
        k_LineOverlayWidth,
        timelineRegion.height);
    

    3. 커스텀 동작 만들기

    타임라인 동작

    Actions를 사용하여 타임라인의 컨텍스트 메뉴에 새 메뉴 항목을 추가할 수 있습니다. 주석의 경우 모든 컨텍스트 메뉴에서 사용할 수 있는 메뉴 항목을 추가하여 클립보드의 내용이 포함된 Annotation을 만들어야 합니다. 이를 위해서는 MenuEntry 속성과 함께 TimelineAction이 필요합니다.

    [MenuEntry("Create Annotation from clipboard contents")]
    public class CreateAnnotationFromClipboardContents : TimelineAction
    {
        //...
    }
    

    MenuEntry는 이 동작을 컨텍스트 메뉴에 추가할 수 있음을 타임라인에 알립니다. TimelineAction에서 상속되는 클래스는 Execute 및 Validate의 두 메서드를 오버라이드해야 합니다.

    검증

    Validate는 동작의 전제 조건이 충족되었음을 지정하는 데 사용됩니다. CreateAnnotationFromClipboardContents의 경우 실제로 클립보드에 콘텐츠가 있는 경우에만 동작이 유효합니다. ActionValidity는 동작의 유효성 상태를 설명하는 데 사용됩니다.

    public override ActionValidity Validate(ActionContext context)
    {
        if (!markers.All(marker => marker is AnnotationMarker))
            return ActionValidity.NotApplicable;
    
        string buffer = EditorGUIUtility.systemCopyBuffer;
        return buffer.Length == 0 ?  ActionValidity.Invalid : ActionValidity.Valid;
    }
    
    • ActionValidity.Valid: 동작을 실행할 수 있습니다.
    • ActionValidity.Invalid: 현재 컨텍스트에서 작업을 실행할 수 없으며, 컨텍스트 메뉴에서 회색으로 표시됩니다.
    • ActionValidity.NotApplicable: 동작이 현재 컨텍스트에 적용되지 않으며, 메뉴에 표시되지 않습니다.

    실행

    Execute는 동작의 목적을 실행하는 데 필요한 코드를 실행해야 합니다.

     public override bool Execute(ActionContext context)
     {
         string buffer = EditorGUIUtility.systemCopyBuffer;
         TrackAsset track = context.tracks.FirstOrDefault();
    
         if (buffer.Length != 0)
         {
             // Create the new annotation and add it to the track
             //...
             return true;
         }
    
         return false;
     }
    

    반환 값은 실행의 성공 여부를 지정해야 합니다.

    마커 동작

    모든 타임라인 항목이 아니라, 마커에만 적용되는 커스텀 동작을 작성할 수도 있습니다. 이는 MarkerEditor 클래스의 목적입니다. 동작이 마커 리스트에 적용된다는 점만 제외하고 TimelineAction과 동일하게 작동합니다.

    또한 동작에 단축키를 할당할 수도 있습니다. 이를 위해 TimelineShortcut 속성이 있는 정적 메서드가 필요합니다. Invoker를 사용하여 특정 동작을 쉽게 실행할 수 있습니다.

    [TimelineShortcut("Replace annotation description with clipboard", KeyCode.G)]
    public static void InvokeAction()
    {
        Invoker.InvokeWithSelectedMarkers<ReplaceAnnotationDescriptionAction>();
    }
    

    참고

    런타임 고려 사항

    AnnotationMarker는 런타임 시점에 사용할 수 있습니다. 예를 들어 TrackAsset.GetMarkers()를 사용하여 쿼리할 수 있습니다. 하지만 AnnotationMarkerEditor 및 커스텀 동작은 런타임 어셈블리의 일부가 아닌 클래스에 종속되기 때문에 런타임 시점에 사용할 수 없습니다.

    문서 개요
    맨 위로
    Copyright © 2023 Unity Technologies — 상표 및 이용약관
    • 법률정보
    • 개인정보처리방침
    • 쿠키
    • 내 개인정보 판매 금지
    • Your Privacy Choices (Cookie Settings)