うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】uGUI で絵を書く

EventSystems を 利用して Texture2D に絵をかけるスクリプト

f:id:hacchi_man:20220117000524g:plain

スクリプト

using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
 
[RequireComponent(typeof(RawImage))]
public class DrawTexture : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
    [SerializeField]
    private RawImage _rawImage;
 
    [SerializeField]
    private int _radius = 3;
 
    private Texture2D _texture;
    private Vector2 _screenPointMax;
    private Vector2 _screenPointMin;
    private Vector2 _lastScreenPosition;
     
    private const int DIVIDE = 20;
    private Dictionary<Vector2Int, float> _dictionary;

    public event Action<Texture2D> Drawn;

#if UNITY_EDITOR
    private void Reset()
    {
        _rawImage = GetComponent<RawImage>();
    }
#endif

    private void Start()
    {
        var rectTransform = transform as RectTransform;
 
        var sizeDelta = rectTransform.sizeDelta;
        _texture = new Texture2D(
            (int) sizeDelta.x, 
            (int) sizeDelta.y
        );
 
        _texture.wrapMode = TextureWrapMode.Clamp;
        for (var x = 0; x < _texture.width; x++)
        {
            for (var y = 0; y < _texture.height; y++)
            {
                _texture.SetPixel(x, y, Color.white);
            }
        }
 
        _texture.Apply();
        _rawImage.texture = _texture;
         
        var canvas = transform.GetComponentInParent<Canvas>().rootCanvas;
 
        var corners = new Vector3[4];
        rectTransform.GetWorldCorners(corners);
         
        var screenPoints = new Vector3[4];
        for (var i = 0; i < corners.Length; i++)
        {
            var screenPoint = RectTransformUtility.WorldToScreenPoint(canvas.worldCamera, corners[i]);
            screenPoints[i] = screenPoint;
        }
 
        _screenPointMax = new Vector2(
            screenPoints.Max(v => v.x),
            screenPoints.Max(v => v.y)
        );
         
        _screenPointMin = new Vector2(
            screenPoints.Min(v => v.x),
            screenPoints.Min(v => v.y)
        );
 
        _dictionary = new Dictionary<Vector2Int, float>();
        for (var x = -_radius; x <= _radius; x++)
        {
            for (var y = -_radius; y <= _radius; y++)
            {
                var position = new Vector2Int(x, y);
                if (!_dictionary.ContainsKey(position))
                {
                    _dictionary.Add(position, 1f);
                }
            }
        }
    }
 
    private void OnDestroy()
    {
        Destroy(_texture);
    }
 
    private void Draw(Vector2 screenPosition)
    {
        var u = Mathf.InverseLerp(_screenPointMin.x, _screenPointMax.x, screenPosition.x);
        var v = Mathf.InverseLerp(_screenPointMin.y, _screenPointMax.y, screenPosition.y);
        var x = (int)Mathf.Lerp(0, _texture.width - 1, u); 
        var y = (int)Mathf.Lerp(0, _texture.height - 1, v);
        foreach (var pair in _dictionary)
        {
            if (x < 0 || y < 0 || x >= _texture.width || y >= _texture.height)
                continue;
            
            _texture.SetPixel(x + pair.Key.x, y + pair.Key.y, Color.black);
        }
    }
 
    private void CompleteDraw(Vector2 screenPosition)
    {
        // 20分割で補間
        for (var i = 0; i <= DIVIDE; i++)
        {
            var lerpScreenPosition = Vector2.Lerp(_lastScreenPosition, screenPosition, i / (float)DIVIDE);
            Draw(lerpScreenPosition);
        }
    }
 
    void IBeginDragHandler.OnBeginDrag(PointerEventData eventData)
    {
        Draw(eventData.position);
        _texture.Apply();
        _lastScreenPosition = eventData.position;
    }
 
    void IDragHandler.OnDrag(PointerEventData eventData)
    {
        CompleteDraw(eventData.position);
        _texture.Apply();
        _lastScreenPosition = eventData.position;
    }
 
    void IEndDragHandler.OnEndDrag(PointerEventData eventData)
    {
        Drawn?.Invoke(_texture);
    }
}

【Unity】tesseract-unity の学習データを変更する

GitHub - Neelarghya/tesseract-unity: Standalone OCR plugin for Unity using Tesseract

上記のライブラリにはデフォルトで英語の学習データ (eng.traineddata)しか入っていないため、日本語データを読み込んだとしても正しく解析ができない

f:id:hacchi_man:20220116232856p:plain

そのため、別の言語を利用する際には対応した学習データが必要になる

学習データの追加

学習データのDLは こちら から行える

DLした後、hoge.traineddataAssets/StreamingAssets/tessdata/ に追加する

読み込み学習データの変更

Assets/Scripts/TesseractDriver.cs で eng を読み込みようになっているため

ここを読み込みたいファイル名に合わせて変更する

    public void OcrSetup(UnityAction onSetupComplete)
    {
        _tesseract = new TesseractWrapper();

#if UNITY_EDITOR
        string datapath = Path.Combine(Application.streamingAssetsPath, "tessdata");
#elif UNITY_ANDROID
        string datapath = Application.persistentDataPath + "/tessdata/";
#else
        string datapath = Path.Combine(Application.streamingAssetsPath, "tessdata");
#endif

--        if (_tesseract.Init("eng", datapath))
++        if (_tesseract.Init("hoge", datapath))

再度読み込んでみる

日本語の学習データを利用しているので正しく画像の解析ができた

f:id:hacchi_man:20220116232801p:plain

【Unity】tesseract を apple silicon mac で利用する

tesseract を試して見ようと探したところ github にライブラリがあったので利用してみた

https://github.com/Neelarghya/tesseract-unity

しかし、Unity 上 Dll のロードができないらしくで動作しなかった

System.DllNotFoundException - tesseract assembly: type: member:(null)

もしかすると Apple Silicon 搭載してる場合には利用できなかった可能性がある

Android の確認

Build target を Android に変更しビルドしみてる

Android 12 の端末に入れたところ動作していることが確認できた

ライブラリの差し替え

自前でビルドするのは面倒なので、brew で install できる ライブラリを利用してみる

brew install tesseract

5.0.1 が入っていることが確認できた

username@MacBook-Pro ~ % tesseract -v
tesseract 5.0.1
 leptonica-1.82.0
  libgif 5.2.1 : libjpeg 9d : libpng 1.6.37 : libtiff 4.3.0 : zlib 1.2.11 : libwebp 1.2.1 : libopenjp2 2.4.0
 Found NEON
 Found libarchive 3.5.2 zlib/1.2.11 liblzma/5.2.5 bz2lib/1.0.8 liblz4/1.9.3 libzstd/1.5.0
 Found libcurl/7.77.0 SecureTransport (LibreSSL/2.8.3) zlib/1.2.11 nghttp2/1.42.0

保存先を確認

$ brew list tesseract
/opt/homebrew/Cellar/tesseract/5.0.1/bin/tesseract
/opt/homebrew/Cellar/tesseract/5.0.1/include/tesseract/ (12 files)
/opt/homebrew/Cellar/tesseract/5.0.1/lib/libtesseract.5.dylib
/opt/homebrew/Cellar/tesseract/5.0.1/lib/pkgconfig/tesseract.pc
/opt/homebrew/Cellar/tesseract/5.0.1/lib/ (2 other files)
/opt/homebrew/Cellar/tesseract/5.0.1/share/tessdata/ (35 files)

ライブラリは以下のディレクトリのを利用する

% ls  /opt/homebrew/Cellar/tesseract/5.0.1/lib/
libtesseract.5.dylib    libtesseract.a      libtesseract.dylib  pkgconfig

これを Assets/Plugins/Mac の中身と置き換える

動作確認

再生してみると問題なく動作した

f:id:hacchi_man:20220116125225p:plain

【Unity】ProjectSettings や Preferences をスクリプトから開く

ProjectSettings

SettingsService.OpenProjectSettings を利用するパスの前には Project/ をつける必要がある

[MenuItem("Settings/OpenProject")]
private static void OpenProject()
{
    // Project Settings の Player を開く
    SettingsService.OpenProjectSettings("Project/Player");
}

Preferences

SettingsService.OpenUserPreferences を利用するパスの前には Preferences/ をつける必要がある

[MenuItem("Settings/OpenPreferences")]
private static void OpenPreferences()
{
    // Preferences の Colors を開く
    SettingsService.OpenUserPreferences("Preferences/Colors");
}

【Unity】 ProjectSettings もしくは UserSettings に ScriptableObject の Inspector をそのまま表示する

AssetSettingsProvider を利用すると ScriptableObject をそのまま設定画面に表示することができる

1 階層 深くなりますがアセットを探す手間が省けて便利です

using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
 
public class SampleScriptableObject : ScriptableObject
{
}
 
public class ScriptableObjectSettingsProvider : SettingsProvider
{
    private ScriptableObjectSettingsProvider() : base("Project/Sample", SettingsScope.Project)
    {
    }
     
    [SettingsProviderGroup]
    private static SettingsProvider[] CreateSettingsProvider()
    {
        var providers = new List<SettingsProvider> { new ScriptableObjectSettingsProvider() };

        if (Load() != null)
        {
            var provider = new AssetSettingsProvider("Project/Sample/Settings", Load);
            providers.Add(provider);
        }
 
        return providers.ToArray();
    }
 
    private static SampleScriptableObject Load()
    {
        return Resources.Load<SampleScriptableObject>("");
    }
     
    public override void OnGUI(string searchContext)
    {
    }
}

【Unity】PackageManager 対応ライブラリ一覧

作成した PackageManager 対応のライブラリをまとめていきます

Package Manager URL List

Package Manager で利用する際に必要な URL まとめ

名前 URL
Find Missing Script https://github.com/yayorozu/UnityEditorFindMissingScript.git
Yorozu Tool https://github.com/yayorozu/UnityYorozuEditorTool.git
Asset Choice https://github.com/yayorozu/UnityEditorAssetChoice.git
Color Folder https://github.com/yayorozu/UnityEditorColorFolder.git
Texture Edit https://github.com/yayorozu/UnityEditorTextureEdit.git
Google Drive Helper https://github.com/yayorozu/UnityGoogleDriveHelper.git
Save Data https://github.com/yayorozu/UnityYorozuSaveData.git
Menu Item https://github.com/yayorozu/UnityEditorYorozuMenuItem.git
Scene Drawer https://github.com/yayorozu/UnitySceneDrawer.git

Find Missing Script

Missing Script を探すツール

github.com

Yorozu Tool

アセットや Hierarchy のお気に入りやログを管理するツール

github.com

Asset Choice

Unity で Package を Export 時に表示されるような アセット選択モーダルウィンドウを表示するツール

github.com

Color Folder

Project Window のフォルダアイコンに色をつけるツール

github.com

Texture Edit

テクスチャを加工するツール

github.com

Google Drive Helper

Google Drive を利用するためのライブラリ

github.com

Save Data

データを管理するライブラリ

github.com

Menu Item

メニューアイテム詰め合わせ

github.com

Scene Drawer

シーン上に Gizmo を表示して可視化するツール

github.com

【Unity】GUIStyle 一覧を表示する EditorWindow

GUI.skin. からアクセスできる GUIStyle は把握してますが、名前がわからずに内部で利用されている GUIStyle が数多くあるので、それを一覧で表示する Editor を作成しました

f:id:hacchi_man:20220103211132p:plain:w550

最後に一覧で GUIStyle の名前も載っけておきます

スクリプト

using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class GUIStyleChecker : EditorWindow
{
    [MenuItem("Tools/GUIStyleChecker")]
    private static void ShowWindow()
    {
        var window = GetWindow<GUIStyleChecker>();
        window.titleContent = new GUIContent("GUIStyleChecker");
        window.Show();
    }
 
    private List<GUIStyle> _editorGUIStyles;
    private Vector2 _position;
 
    private void Init()
    {
        if (_editorGUIStyles != null)
            return;
        
        _editorGUIStyles = new List<GUIStyle>();
        var e = GUI.skin.GetEnumerator();
        while (e.MoveNext())
        {
            try
            {
                _editorGUIStyles.Add(e.Current as GUIStyle);
            }
            catch
            {
                // ignored
            }
        }
    }
 
    private void OnGUI()
    {
        Init();
        using (var scroll = new GUILayout.ScrollViewScope(_position))
        {
            _position = scroll.scrollPosition;
            foreach (var style in _editorGUIStyles)
            {
                using (new EditorGUILayout.HorizontalScope("box"))
                {
                    EditorGUILayout.SelectableLabel(style.name);
                    GUILayout.Space(10);
                    EditorGUILayout.LabelField(style.name, style, GUILayout.ExpandWidth(true));
                }
            }
        }
    }
}

GUIStyle 一覧

box
button
toggle
label
window
textfield
textarea
horizontalslider
horizontalsliderthumb
verticalslider
verticalsliderthumb
horizontalscrollbar
horizontalscrollbarthumb
horizontalscrollbarleftbutton
horizontalscrollbarrightbutton
verticalscrollbar
verticalscrollbarthumb
verticalscrollbarupbutton
verticalscrollbardownbutton
scrollview
AboutWIndowLicenseLabel
AC BoldHeader
AC Button
AC ComponentButton
AC GroupButton
AC LeftArrow
AC PreviewHeader
AC PreviewText
AC RightArrow
AM ChannelStripHeaderStyle
AM EffectName
AM HeaderStyle
AM MixerHeader
AM MixerHeader2
AM ToolbarLabel
AM ToolbarObjectField
AM TotalVuLabel
AM VuValue
AnimationEventBackground
AnimationEventTooltip
AnimationEventTooltipArrow
AnimationKeyframeBackground
AnimationPlayHead
AnimationRowEven
AnimationRowOdd
AnimationSelectionTextField
AnimationTimelineTick
AnimClipToolbar
AnimClipToolbarButton
AnimClipToolbarPopup
AnimItemBackground
AnimLeftPaneSeparator
AnimPlayToolbar
AnimPropDropdown
AppCommand
AppCommandLeft
AppCommandLeftOn
AppCommandMid
AppCommandRight
AppToolbar
AppToolbarButtonLeft
AppToolbarButtonMid
AppToolbarButtonRight
ArrowNavigationLeft
ArrowNavigationRight
AssetLabel
AssetLabel Icon
AssetLabel Partial
AvatarMappingBox
AvatarMappingErrorLabel
AxisLabelNumberField
Badge
BoldLabel
BoldTextField
BoldToggle
BottomShadowInwards
BreadcrumbsSeparator
ButtonLeft
ButtonMid
ButtonRight
BypassToggle
CacheFolderLocation
CenteredLabel
ChannelStripAttenuationBar
ChannelStripAttenuationMarkerSquare
ChannelStripBg
ChannelStripDuckingMarker
ChannelStripEffectBar
ChannelStripSendReturnBar
ChannelStripVUMeterBg
CircularToggle
CN Box
CN CenteredText
CN CountBadge
CN EntryBackEven
CN EntryBackOdd
CN EntryError
CN EntryErrorIcon
CN EntryErrorIconSmall
CN EntryErrorSmall
CN EntryInfo
CN EntryInfoIcon
CN EntryInfoIconSmall
CN EntryInfoSmall
CN EntryWarn
CN EntryWarnIcon
CN EntryWarnIconSmall
CN EntryWarnSmall
CN Message
CN StacktraceBackground
CN StacktraceStyle
CN StatusError
CN StatusInfo
CN StatusWarn
ColorField
ColorPicker2DThumb
ColorPickerBackground
ColorPickerBox
ColorPickerCurrentColor
ColorPickerCurrentExposureSwatchBorder
ColorPickerExposureSwatch
ColorPickerHorizThumb
ColorPickerHueRing
ColorPickerHueRing HDR
ColorPickerHueRingThumb
ColorPickerOriginalColor
ColorPickerSliderBackground
Command
CommandLeft
CommandMid
CommandRight
ContentToolbar
ControlHighlight
ControlLabel
CurveEditorBackground
CurveEditorLabelTickmarks
CurveEditorLabelTickmarksOverflow
CurveEditorRightAlignedLabel
DD Background
DD HeaderStyle
DD ItemCheckmark
DD ItemStyle
DD LargeItemStyle
DefaultCenteredLargeText
DefaultCenteredText
DefaultLineSeparator
dockarea
dockareaOverlay
dockareaStandalone
dockHeader
DopesheetBackground
Dopesheetkeyframe
DopesheetRippleLeft
DopesheetRippleRight
DopesheetScaleLeft
DopesheetScaleRight
dragtab
dragtab first
dragtab scroller next
dragtab scroller prev
dragtabdropwindow
DropDown
DropDownButton
DropzoneStyle
EditModeSingleButton
ErrorLabel
ExposablePopupItem
ExposablePopupMenu
EyeDropperHorizontalLine
EyeDropperPickedPixel
EyeDropperVerticalLine
FloatFieldLinkButton
flow background
flow node 0
flow node 0 on
flow node 1
flow node 1 on
flow node 2
flow node 2 on
flow node 3
flow node 3 on
flow node 4
flow node 4 on
flow node 5
flow node 5 on
flow node 6
flow node 6 on
flow node base
flow node hex 0
flow node hex 0 on
flow node hex 1
flow node hex 1 on
flow node hex 2
flow node hex 2 on
flow node hex 3
flow node hex 3 on
flow node hex 4
flow node hex 4 on
flow node hex 5
flow node hex 5 on
flow node hex 6
flow node hex 6 on
flow node hex base
flow node titlebar
flow target in
flow triggerPin in
flow triggerPin out
flow varPin in
flow varPin out
flow varPin tooltip
Foldout
FoldoutHeader
FoldoutHeaderIcon
FoldOutPreDrop
Frame
FrameBox
GameViewBackground
Grad Down Swatch
Grad Down Swatch Overlay
Grad Up Swatch
Grad Up Swatch Overlay
grey_border
GridList
GridListText
GroupBox
GUIEditor.BreadcrumbLeft
GUIEditor.BreadcrumbLeftBackground
GUIEditor.BreadcrumbMid
GUIEditor.BreadcrumbMidBackground
GV Gizmo DropDown
HeaderButton
HeaderLabel
HelpBox
Hi Label
HorizontalMinMaxScrollbarThumb
HorizontalSliderThumbExtent
hostview
IconButton
IN BigTitle
IN BigTitle Inner
IN BigTitle Post
IN CenteredLabel
IN DropDown
IN EditColliderButton
IN Foldout
IN Footer
IN Label
IN LockButton
IN MinMaxStateDropDown
IN ObjectField
IN TextField
IN ThumbnailSelection
IN ThumbnailShadow
IN Title
IN Title Flat
IN TitleText
IN TypeSelection
InnerShadowBg
InsertionMarker
InvisibleButton
LargeBoldLabel
LargeButton
LargeButtonLeft
LargeButtonMid
LargeButtonRight
LargeLabel
LightmapEditorSelectedHighlight
LinkLabel
LODBlackBox
LODCameraLine
LODLevelNotifyText
LODRendererAddButton
LODRendererButton
LODRendererRemove
LODRenderersText
LODSceneText
LODSliderBG
LODSliderRange
LODSliderRangeSelected
LODSliderText
LODSliderTextSelected
MeBlendBackground
MeBlendPosition
MeBlendTriangleLeft
MeBlendTriangleRight
MeLivePlayBackground
MeLivePlayBar
MenuItem
MenuItemMixed
MenuToggleItem
MeTimeBlockLeft
MeTimeBlockRight
MeTimeLabel
MeTransitionBack
MeTransitionBlock
MeTransitionHandleLeft
MeTransitionHandleLeftPrev
MeTransitionHandleRight
MeTransitionHead
MeTransitionSelect
MeTransitionSelectHead
MeTransOff2On
MeTransOffLeft
MeTransOffRight
MeTransOn2Off
MeTransOnLeft
MeTransOnRight
MeTransPlayhead
MiniBoldLabel
minibutton
minibuttonleft
minibuttonmid
minibuttonright
MiniLabel
MiniMinMaxSliderHorizontal
MiniMinMaxSliderVertical
MiniPopup
MiniPullDown
MiniSliderHorizontal
MiniSliderVertical
MiniTextField
MiniToolbarButton
MiniToolbarButtonLeft
MinMaxHorizontalSliderThumb
MultiColumnArrow
MultiColumnHeader
MultiColumnHeaderCenter
MultiColumnHeaderRight
MultiColumnTopBar
MuteToggle
NotificationBackground
NotificationText
ObjectField
ObjectFieldButton
ObjectFieldMiniThumb
ObjectFieldThumb
ObjectFieldThumbLightmapPreviewOverlay
ObjectFieldThumbOverlay
ObjectFieldThumbOverlay2
ObjectPickerBackground
ObjectPickerLargeStatus
ObjectPickerPreviewBackground
ObjectPickerResultsEven
ObjectPickerResultsGrid
ObjectPickerResultsOdd
ObjectPickerSmallStatus
ObjectPickerTab
ObjectPickerToolbar
OffsetDropDown
OL box
OL box flat
OL box NoExpand
OL EntryBackEven
OL EntryBackOdd
OL Label
OL MiniPing
OL MiniRenameField
OL Minus
OL Ping
OL Plus
OL ResultFocusMarker
OL ResultLabel
OL RightLabel
OL SelectedRow
OL Title
OL Title TextRight
OL Toggle
OL ToggleMixed
OL ToggleWhite
OT BottomBar
OT TopBar
OverrideMargin
PaneOptions
PlayerSettingsLevel
PlayerSettingsPlatform
Popup
PopupCurveDropdown
PopupCurveEditorBackground
PopupCurveEditorSwatch
PopupCurveSwatchBackground
PR BrokenPrefabLabel
PR DisabledBrokenPrefabLabel
PR DisabledLabel
PR DisabledPrefabLabel
PR Insertion
PR Label
PR Ping
PR PrefabLabel
PR TextField
PreBackground
PreBackgroundSolid
PreButton
PreButtonBlue
PreButtonGreen
PreButtonRed
PreDropDown
PreferencesKeysElement
PreferencesSection
PreferencesSectionBox
PrefixLabel
PreHorizontalScrollbar
PreHorizontalScrollbarThumb
PreLabel
PreLabelUpper
PreMiniLabel
PreOverlayLabel
PreSlider
PreSliderThumb
PreToolbar
PreToolbar2
PreVerticalScrollbar
PreVerticalScrollbarThumb
PreviewPackageInUse
ProfilerBadge
ProfilerDetailViewBackground
ProfilerGraphBackground
ProfilerHeaderLabel
ProfilerLeftPane
ProfilerNoDataAvailable
ProfilerNotSupportedWarningLabel
ProfilerPaneSubLabel
ProfilerRightPane
ProfilerScrollviewBackground
ProfilerSelectedLabel
ProfilerTimelineBar
ProfilerTimelineDigDownArrow
ProfilerTimelineFoldout
ProfilerTimelineLeftPane
ProfilerTimelineRollUpArrow
ProgressBarBack
ProgressBarBar
ProgressBarText
ProjectBrowserBottomBarBg
ProjectBrowserGridLabel
ProjectBrowserHeaderBgMiddle
ProjectBrowserHeaderBgTop
ProjectBrowserIconAreaBg
ProjectBrowserIconDropShadow
ProjectBrowserPreviewBg
ProjectBrowserSubAssetBg
ProjectBrowserSubAssetBgCloseEnded
ProjectBrowserSubAssetBgDivider
ProjectBrowserSubAssetBgMiddle
ProjectBrowserSubAssetBgOpenEnded
ProjectBrowserSubAssetExpandBtn
ProjectBrowserSubAssetExpandBtnMedium
ProjectBrowserSubAssetExpandBtnSmall
ProjectBrowserTextureIconDropShadow
ProjectBrowserTopBarBg
QualitySettingsDefault
Radio
RectangleToolHBar
RectangleToolHBarLeft
RectangleToolHBarRight
RectangleToolHighlight
RectangleToolRippleLeft
RectangleToolRippleRight
RectangleToolScaleBottom
RectangleToolScaleLeft
RectangleToolScaleRight
RectangleToolScaleTop
RectangleToolSelection
RectangleToolVBar
RectangleToolVBarBottom
RectangleToolVBarTop
RegionBg
ReorderableList
ReorderableListRightAligned
RightAlignedLabel
RightLabel
RL Background
RL DragHandle
RL Element
RL Empty Header
RL Footer
RL FooterButton
RL Header
SC ViewAxisLabel
SC ViewLabel
SC ViewLabelCentered
SC ViewLabelLeftAligned
SceneTopBarBg
SceneViewOverlayTransparentBackground
SceneVisibility
ScriptText
ScrollViewAlt
SearchCancelButton
SearchCancelButtonEmpty
SearchModeFilter
SearchTextField
SelectionRect
SettingsHeader
SettingsIconButton
SettingsListItem
SettingsTreeItem
ShurikenCheckMark
ShurikenCheckMarkMixed
ShurikenDropdown
ShurikenEditableLabel
ShurikenEffectBg
ShurikenEmitterTitle
ShurikenLabel
ShurikenMinus
ShurikenModuleBg
ShurikenModuleTitle
ShurikenObjectField
ShurikenPlus
ShurikenPopup
ShurikenToggle
ShurikenToggleMixed
ShurikenValue
SliderMixed
SoloToggle
StaticDropdown
StatusBarIcon
sv_iconselector_back
sv_iconselector_button
sv_iconselector_labelselection
sv_iconselector_selection
sv_iconselector_sep
sv_label_0
sv_label_1
sv_label_2
sv_label_3
sv_label_4
sv_label_5
sv_label_6
sv_label_7
Tab first
Tab last
Tab middle
Tab onlyOne
TabWindowBackground
Tag MenuItem
TE BoxBackground
TE DefaultTime
TE DropField
TE ElementBackground
TE NodeBackground
TE NodeBox
TE NodeBoxSelected
TE NodeLabelBot
TE NodeLabelTop
TE PinLabel
TE Toolbar
TE toolbarbutton
TE ToolbarDropDown
TextFieldDropDown
TextFieldDropDownText
TimeAreaToolbar
TimeRulerBackground
TimeScrubber
TimeScrubberButton
Titlebar Foldout
TL InPoint
TL OutPoint
TL Playhead
ToggleMixed
Toolbar
ToolbarBoldLabel
ToolbarBottom
toolbarbutton
ToolbarButtonFlat
toolbarbuttonLeft
toolbarbuttonRight
ToolbarCreateAddNewDropDown
ToolbarDropDown
ToolbarDropDownLeft
ToolbarDropDownRight
ToolbarDropDownToggle
ToolbarDropDownToggleRight
ToolbarLabel
ToolbarPopup
ToolbarPopupLeft
ToolbarPopupRight
ToolbarSeachCancelButton
ToolbarSeachCancelButtonEmpty
ToolbarSeachTextField
ToolbarSeachTextFieldPopup
ToolbarSearchField
ToolbarSlider
ToolbarSliderTextField
ToolbarTextField
Tooltip
TV Insertion
TV Line
TV LineBold
TV Ping
TV Selection
U2D.createRect
U2D.dragDot
U2D.dragDotActive
U2D.dragDotDimmed
U2D.pivotDot
U2D.pivotDotActive
VerticalMinMaxScrollbarThumb
VerticalSliderThumbExtent
VideoClipImporterLabel
WarningOverlay
WhiteBackground
WhiteBoldLabel
WhiteLabel
WhiteLargeCenterLabel
WhiteLargeLabel
WhiteMiniLabel
WinBtn
WinBtnClose
WinBtnCloseMac
WinBtnInactiveMac
WinBtnMax
WinBtnMaxMac
WinBtnMinMac
WinBtnRestore
WinBtnRestoreMac
WindowBottomResize
Wizard Box
Wizard Error
WordWrapLabel
wordwrapminibutton
WordWrappedLabel
WordWrappedMiniLabel