Search Unity

先日、2021 年に向けたロードマップを発表しました。今回から、ロードマップで掲げた目標に向けて活動しているチームの一部を紹介します。この新シリーズの最初の記事では、コードネーム「Quality of Life」の下で活動しているチームに焦点を当てます。

Unity の 2021 年へのロードマップでは、来年に向けて優先的に取り組んでいく事柄を紹介しています。私たちは、皆様からいただいたご意見に基づいて、本番の開発でお使いいただける機能をアップデートし、主要な新機能をお届けできるよう、尽力しています。しかし、私たちは、ワークフローを改善し、エディターで作業する際の全体的なユーザー体験を向上させることにも力を注いでいます。

この記事では、Unity 開発の舞台裏を垣間見るシリーズの第 1 弾です。このシリーズでは、皆様により良い Unity を届けるための取り組みを行っているチームから話を聞き、何がチームを衝き動かしているのかを知り、また、チームの取り組みの進捗状況を見ることを目的としています。新シリーズの初回の記事では、「Quality of Life」という社内コードネームの下で活動しているチームにスポットを当てます。このチームを率いる Aras Pranckevičius と、プロダクトチームの Martin Gram に会い、チームの取り組みについて話を聞きました。

「Quality of Life」とは何か

私たちは皆、より質の良い生活を送りたいと願うものです。Unity でも、ユーザーの 「生活の質」、すなわち「Quality of Life」の向上に努めています。しかし、ここで言う「Quality of Life」とは実際には何を意味しているのでしょうか。それは、安定性やバグの修正、リグレッションの回避といった要素だけではありません。Unity の言う「Quality of Life(QoL)」とは、ユーザー体験を構成するどんな小さなことをも包含する概念です。端的には、集約されたワークフローと直感的なインターフェースがこれを構成します。Unity は、皆様が生産性を向上させ、クリエイティブなプロセスに集中できるようにしたいと考えています。

「イテレーション時間を短縮し、作業中断を減少させて、全体的な効率を向上させようということです。」Unity のプロダクトディレクターである Martin Gram はこのように述べています。

近年、Unity が利用される範囲が爆発的に増えています。多くの職種や業界のユーザーにサービスを提供するために、私たちは技術革新を加速させました。同時に、Unity の抱えるツールの種類が大幅に増えました。これは明らかに Unity の複雑さを増大させており、機能間でユーザー体験の一貫性を欠く場合も時としてあります。「QoL 向上を目指す活動においては、これらのギャップを埋めること、そしてエディター全体の使用感に磨きをかけることに重点を置いています」と Martin は説明します。「最近のロードマップに関するブログ記事でも述べましたが、私たちはやることを絞って、それらをより良い形で完遂することにしています。」

より高い基準を設定するチーム

Unity のすべてのチームが品質を重視し、先ほど述べたミッションに貢献していますが、この特別チームはチームをまたいで活動し、チームと各機能領域の間でよく見られる、小さな改善に専念しています。Aras は約 1 年半前にこの特別チームを結成しました。最適化チームがパフォーマンスに焦点を当てているように、Quality of Life チームは、QoL 自体を機能と捉え、その改善に焦点を当てるというアイデアをもって結成されました。

現在、チームはリトアニアのカウナスに拠点を置き、メンバーは 7 人となっています。彼らは Unity 全体にわたって存在する R&D チームと連携していますが、最も近いパートナーは、最適化チーム、シーンツールチーム、QA、プロダクトチーム、社内のプロダクションチームです。チームメンバーのうち 5 人は元々カスタマー QA を担当していましたが、これは偶然ではありません。

「最前線にいるということは、チームが多くのユーザーレポートを見てきたということです。効率化できるものは何かということについて、多くのインサイトを持っています。カスタマー QA は、顧客のバグレポートを再現することに多くの時間を費やしています。つまり、彼らはツールを開発しているだけではなく、Unity を使うことにバックグラウンドを持つ存在だということです。」と Aras は説明します。

7人のチームのうちの5人。上段左から、Paulius、Aras、Lina。下段左から、Justinas と Ignas。

チームのアイデアは、ユーザー体験と機能統合に関する数多くの改善を含む、バージョン管理機能の改善にいくつか取り組んでいたときに固まりました。例えば、Perforce 統合の修正においては、Perforce への接続が失われた場合の自動的な再接続の試行が盛り込まれています。インスペクターウィンドウの上部にある新しいバージョン管理バーではさまざまな改善が行われた中で、追加、ロック、ロック解除、送信などの操作を行うことができるようにする改善が行われました。また、インスペクターの無効化されたフィールドの値を右クリックでコピーできるようになりました。Aras が説明するように、「これらの改善点は、ユーザーから長い間要望のあった機能の例です。私たちのチームでは、これらの改善を行ったときの考え方を他の機能にも拡大して適用していきました。つまり、より多くの機能を追加しようというのではなく、既存のワークフローを磨き上げ、改善することに重点を置くことにしたのです。」

チームのミッションは「製品をより快適に使うための改善を継続的に加えていくこと」とシンプルなものです。これは、エディターをより直感的にし、ワークフローを最適化することを意味します。「Unity は使うのが楽しくなるようなものでなければなりません。私たちは、クリエイターが時間を無駄にせず、より生産的になることを望んでいます。」

チームはプロダクトチームと緊密に連携して優先順位を設定し、フォーラムやソーシャルメディア、『Megacity』や『DOTS Sample』などのデモに取り組む Unity 内部の制作チームなど、あらゆる方面からの提案にオープンに対応しています。

Unity 2020.2 でより良い QoL を実現

最新の TECH ストリームとなる Unity 2020.2 ベータ版の公開に伴い、QoL に関する改善がいくつか追加されました。

Unity 2020.2 では、エディター全体にわたり、数多くの細かな品質改善が施されています。シーンウィンドウの移動、回転、拡大縮小ハンドルの線が太くなり、また太さが調整可能になりました。メッシュインスペクターでブレンドシェイプを視覚化できるようになりました。プレイヤー設定で、スクリプトの #define 設定が配列として表示されるようになりました。複数のプレハブを同時にシーンにドラッグできるようになりました。Frame Selected 機能を、既にフレーム内に表示されているオブジェクトのピボットポイントにズームインするために使えるようになりました…というように、実に数多くの改善点が盛り込まれています。

Unity 2020.2 で Aras が最も気に入っている改善点は、インスペクターで配列とリストの要素が並び替え可能になったというものです。また、[NonReorderable] 属性を使って、これを無効にすることもできます。これは小さな機能ながら、フォーラムやソーシャルメディアにおける多くのユーザーからの要望を受けて行われた変更の好例です。数回のクリックで要素の順序を変えることができるようにすることで、配列やリストの管理を楽にするだけの機能ですが、それが多くのユーザーの要望を受けて実現されたということです。

ベータ版で現在利用可能なものについて詳しく知りたい方は、ブログ記事をチェックして、10 月 8 日(日本時間 10 月 8 日 25 時(10 月 9 日午前 1 時))のウェビナー(英語)に参加されることをおすすめします。

2021 年に予定されていること

2021 年へのロードマップを見据えて、チームの計画はその勢いを保ち、さらにいくつかの改善すべきポイントをすでに設定しています。しかし、Aras はまた、最終目的地というものはないとも強調しています。Unity の改善は決して終わりのないプロセスです。Quality of Life チームは、ベータ版プログラムとの連携や、コミュニティからの意見を広く取り入れる動きを強化していく予定です。

ここでは、2021 年の Unity に搭載される予定の 3 つの機能について先取りして触れたいと思います。

LOD Group インスペクターの改良:LOD の相対的な画面サイズのパーセンテージをテーブル形式のビュー(ラベル、値)で表示できるようになり、正確な値を入力できるようになりました。LOD Group インスペクターは、マルチ選択編集をサポートし、LOD レベルごとの三角形の数を表示し、また、その三角形の数の表示は LOD レベル間で変動します。また、LOD Group インスペクターはオブジェクトのローカル空間でのサイズ設定も公開します。

複数の LOD グループを選択した状態で LOD レベル間の遷移を編集する

異なる LOD レベルでのメッシュの複雑さを概略で表示

再生モードに入るまでの時間の短縮:これは再生モードに入る際に発生するメッシュの静的バッチングプロセスの最適化に関連するものです。私たちのテストでは、この改善により、30,000 個の静的オブジェクトを持つシーンで再生モードに入るまでの時間が約 2 秒短くなったことが確認されています。

また、テクスチャインポート時間の最適化については現在も作業が進められている最中ですが、改善点の一部はすでに Unity 2021.1 に搭載されています。これらは、アセットのインポート時間の中で最も長い部分の高速化に寄与します。

ここに挙げたものは、いくつも行われている改善の代表例です。「こうした改善は小さなことですが、ユーザーのワークフローに大きな違いをもたらします。何百万人ものユーザーが 1 日に何度もタスクを繰り返すことを考えれば、ほんの 1 秒の違いやたった 1 回のマウスのクリックが積み重なって、本当に大きな違いになってきます。」と Aras は締めくくりました。

改善してほしい部分を教えてください

エディターでここを改善してほしいというポイントや、この機能が強化されればエディターの使い心地が変わるというポイントがありましたら、ぜひこの記事のコメント欄やフォーラムで、Quality of Life チームにお知らせください。

舞台裏をさらに知りたい方へ

この記事は、将来バージョンの Unity に向けた開発に取り組んでいる人たちを紹介し、それらの人々のインスピレーションと開発の原動力に触れる、開発者ダイアリーのシリーズ第 1 回目となる記事です。今後のブログ記事で、特に取り上げてほしいチームや機能分野がある方は、この記事のコメント欄でお知らせください。

41 replies on “2021 年へのロードマップ:チーム「Quality of Life」”

the majority of the time when using imported fbx animations, I set the rig to Humanoid. but then animations look pretty messed up and have no choice but to individually set..

1: Root Transform Rotation bake into pose = true
2: based Upon = original
3: Root Transform Position bake into pose = true
4: based upon = original
5: Root Transform Position Xz Bake into pose = true (if not a walking, looping)
6: based upon = original

I have to do this for each animation, just so i can preview it before deciding to use it.
This is tedious and takes a lot of my time up.
Allowing us to access this would be helpful if you cant be bothered to do it.
or have it be a profile setting option.

I would really wish Unity had an out-of-the box set of basic creator features and assets like water, decals, rain, grass, state-of-the-art terrain etc. It is untenable to require creators writing or buing crapy assets for basic 3D features. I would also like there would be one Unity version and one type of assets usable everywhere. The current fragmentation of versions – URP/HDRP/Standard and non-working broken assets is a nightmare.

PLEASE make the window lock button turn red when it is in a locked state so it is better visible! It is super small and hard to see but a different color like red will make it much more apparent at a glance.

Being able to copy multiple lines from the console is fantastic, but it’s *really* frustrating that there’s no way to disable stack traces when copying. Most of the time I don’t need the full stacktrace — I just want the text of the log.

Right now I have to paste it into a text editor and manually delete the stack trace for each line. :(

@Aras Pranckevičius:
As part of “Quality of Life” improvements, can Unity add to MonoBehaviour initialization event for inactive GameObjects? There is a BIG HOLE in Unity’s script life cycle -> Start and Awake are called only for active objects. MonoBehaviour constructor is nasty can of worms, so we need safe initialization event for inactive objects.

@Aras Pranckevičius:

Plus, can Unity open source its Mesh.RecalculateNormals() implementation? It would be great help for anyone creating applications with procedurally generated graphics.

@Aras Pranckevičius:
Plus, we need ability to change dynamic batching size limit. Currently it is hardcoded as 900 vertex attributes and no more than 300 vertices and you need source code license to change these limits. We need a way to change these numbers from the editor.

Does ‘Quality of life’ mean extremely long app load times when using URP 9 or 10 in 2020.2 beta? I think not.. not impressed with regressions in 2020.1 and 2020.2

A bug report with details (URP package version, which platform, which graphics API, .load times before/after) would definitely help — I know nothing about URP.

In my opinion, a first great QoL improvement would be to allow the user to automatically import any asset from the Asset Store in the current project into a specific subfolder defined in the Project Settings, that folder could be called “_3rdParty” by default for instance. Same while importing custom packages, it could be into a different path also set in the project settings.

Second small improvement: add a horizontal scrollbar or lateral focus to Project/Hierachy tab while looking for an asset/GameObject while searching in the tree. This could avoid expanding the window…

A big yes for the first one. When you are using lots of assets from the asset store your project starts becoming a monster. And if you change the position of the asset, when you update it, it will install it at the initial location instead of the “changed one”

A huge QoL improvement for me would be to just stop refreshing the project when I hit the close button. If I’m working on a large project, I always turn off the auto-refresh as importing and compiling can take up to or over a minute… and I’m often switching between development branches, or there can be build scripts that only work when Unity is closed. It’s infuriating when I hit the close button and have to wait for Unity to do a bunch of work that I’m only going to revert.

1. Active “kill” button, to stop execution of a deadlock code in play mode.

2. Responsive UI, when Unity builds player. Right now you can’t kill WebGL compilation (sometimes it takes ages to click “Cancel” button).

3. Scene become “dirty” constantly, even without any changes (mostly because of UI resize). Especially annoying in unit testing and git version control.

Good but QOL must mean getting rid of bugs and too many are present in 2020.
Hard to use HDRP without getting red errors in the console – bugs reported when able to recreate

Please make it possible so we can navigate the editor with keyboard easier.

Allow for example to focus the project, inspector and hierarchy windows by pressing shortcut keys. Also when focused, please make it so we can navigate on objects using arrow keys in case of hierarchy and project and tab in the case of the inspector.

Have feedback for pressing play no matter if the editor is compiling. I can’t count the amount of times I’ve double pressed that button twice, meaning unity will first start entering playmode then immediate exit again. It sounds like a small complaint, but when you have done it several times a day in a project that takes a long time to enter playmode – you will understand my pain.

Agreed. The issue is also that everytime you’re in that “did I or did I not click” state of mind, you risk being momentarily distracted, which potentially leads to more time lost.

+1 This. Don’t lock up that button on assembly reload. Run it on a separate thread or something but it needs to be responsive.

+1 on this. It is also possible in some very rare occasions for the play button to appear as if the game is running even though it isn’t when accidentally clicking it during domain reload.

This is a big yes! Separate the SDKs into Unity Hub so we can upgrade to the latest LTS version without needed to redownload all the SDK components that we want

It would be great to extend this thinking to Unity Services. I imagine there are many at Unity who use the editor all the time but never or rarely use the dashboard, even during Hackweek.

My god – this!

I can’t even imagine how many simple UX problems I found in unity services dashboard. First that comes to my mind, is a “button” instead of a “link”. On 99% websites, you can click on menu/tab/card item with middle mouse button, to open it in a new card. In unity dashboard, you can only click these buttons with left button, and open them in the same card.

@LeonhardP I posted to that forum on Wednesday, no reply yet. Nobody from Unity responded to the other thread there either.

I understand this is not necessarily a QoL change, but while you’re at it changing the LOD Group component, how about adding a secondary mode where the LOD factor is based on distance from the camera, not screen size? For some projects (VR, mobile) this is a much more intuitive way of configuring performance. I have implemented this myself in the past but the overhead is very high when the scene contains a lot of objects, native support would be fantastic.

Did you try it with culling groups API? it has distance bands, but it is still a bad workaround for what should be a native everyday part of LOD management. Other engines offer distance and screen size options.

Great and much needed initiative!

A few more common QoL grievances come to mind:
Adding multiple items to a list
It would be great to be able to add multiple items to a list (e.g. music track 01-05) without losing inspector focus. Right now, I either have to add them one by one or the old trick of 1) Lock Inspector 2) Select all objects and drag them onto list 3) Unlock inspector.

The “static” checkbox
This checkbox effectively hides a bunch of important, but largely unrelated settings. Some have to do with batching, others with lightbaking and rendering, some with occlusion, some with navigation. In my experience, more often than not you don’t want all these off/on simultaneously, but the representation makes that seem like the obvious choice and invites team members to do so. Manually configuring these settings is a massive, time-consuming pain, because you can only do it by clicking the tiny, fiddly arrow next to the checkbox, then adjusting flags one by one, each of which raises a modal dialog (“Apply to children?”). I’ve had to reset to custom-made tools just to stay sane before.

I wonder why these have to be under this obscure header of “static”, since they’re disparate flags that would really make more sense of the actual components they affect. E.g. “why can I check Reflection Probe/Batching static if this object doesn’t even have a a Renderer?” or “My level designer clicked the static checkbox because they wanted this object to batch, but now it’s also a navigation obstacle…” Note that the Lightmap Static toggle already points towards this solution: it is (inconsistently) also exists on the MeshRenderer, from where it somehow sets the GameObject’s flags.

I understand the above suggestion might be a more invasive refactor than a QoL team might want to tackle. In that case, I would already consider it a big improvement if editing these flags was made less cumbersome and the whole thing was represented as the collection of settings that it is.

You can right click the target component/gameobject and choose properties at the bottom and it will pop out a separate window for that so you don’t have to do the lock/unlock dance.

I am not sure if that was your issue, but felt the need to share if so.

Speaking about QOL improvements, it would be great to get an official solution for prefab lightmaps, instead of a script that is floating around since 2015 sometime on the forums being the only official thing provided to take care of this.

That would make a lot of projects much more feasible, most time I spend on contactor projects is working out how to get around the prefab lightmap issue as large scenes on devices like HoloLens or WebGL projects often require high usage of prefabs to build up and unload parts of scenes. Sometimes having actual scenes is not an option too.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です