3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Unity】USSファイルはディレクトリ変更、リネームに弱いので注意

Posted at

UnityのファイルはGUIDで管理されているためUnity内でファイル移動、またはファイルのリネームをしても参照が外れず安心ですがUI Toolkitは例外です。

USSファイルは文字列指定

Sample.uxml
<ui:UXML xmlns:ui="UnityEngine.UIElements" engine="UnityEngine.UIElements" editor-extension-mode="False">
    <!-- 参照USSを文字列指定 -->
    <Style src="/Assets/_Sample/Uss/Common.uss" />
    <ScreenA name="ScreenA" class="screen">
        <ui:VisualElement name="bg-a" class="screen">
            <ui:Label text="Screen A" display-tooltip-when-elided="True" name="A" class="screen-label" />
        </ui:VisualElement>
    </ScreenA>
</ui:UXML>

上記の例ではSample.uxmlがCommon.ussを参照しているのですが、<Style src="/Assets/_Sample/Uss/Common.uss" />といったように文字列で入力することになります。

UXMLはUnityにインポートする時、内部的にはScriptableObjectに変換されますが、ただのテキストファイルです。
USSへの参照は文字列指定になります。

USSのパスが変更されるとどうなるのか?

単純に参照が外れます。
Unityが気を利かせてUSSの参照を追っかけてパスを修正してくれるわけではありません。

ではどうするか?

「USSのパスが変わらないように事前に設計する」

僕の中では一旦この構成が良いかなと思ってきています。
  • Uss/Common.uss 各UXMLで必ず使用する共通USS
  • Uss/各UXML名/Hoge.uss各UXMLで使用する固有USS

USSファイル、UXMLファイル共に非エンジニアに近いクリエーターが作業することになります。1

その際、ファイルアイコンだけではUXMLとUSSの区別がしづらいため、ディレクトリを分けてしまうのが良いかと思っています。

もしくはScreenA_UXMLCommonUSSのように、UXML/USSを認識できるファイル名にするのも良いかもしれません。

※実戦投入してみないと何がベストプラクティスなのかはわからないため、あくまで想像の話です

まとめ

  • 現状のUnityではUSSのファイル移動、リネームにはコストが掛かります
  • 無駄な作業が発生しないようにUSSディレクトリ構成を予めFIXさせておきましょう

以上です。

  1. もちろんUnityエンジニアも作業対象

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?