Building a Unified Cross-Project UI Framework

GDC
16 Jul 202131:03

Summary

TLDR娜塔莉亚·雷布罗娃分享了她在游戏公司Cyber Games构建UI框架的经验。她强调了UI框架对于统一设计系统、提高开发效率和维护品牌一致性的重要性。通过原子设计方法,她介绍了如何创建可重用的组件和行为模式,以及如何通过简化设计师和工程师之间的协作流程来加快迭代速度。她还讨论了如何为非工程师提供实施UI的自由,以及如何通过UI框架的导航、切片、视图配置和过渡配置来简化和加速游戏界面的开发。

Takeaways

  • 🚀 构建UI框架可以为多个团队和项目公司带来好处,提高UI开发的效率。
  • 🎨 Natalia Rybrova分享了她从游戏UI设计师到UI/UX设计师的职业转变经历。
  • 📈 随着公司规模的扩大,重新构建UI开发流程变得尤为重要。
  • 🔧 传统的Unity UI系统存在缺陷,需要编程知识,且在移动端支持不佳。
  • 🔄 设计师在UI实施中缺乏控制权,导致设计迭代缓慢且不一致。
  • 🔧 多个团队在解决相似的UI问题时缺乏统一的技术和解决方案。
  • 🔨 为了统一UI实现层,Cyber Games开始构建自己的UI框架。
  • 📚 基于原子设计方法,UI框架由可重用的组件和行为模式组成。
  • 🛠️ UI框架允许设计师在不需要编程的情况下实现UI,显著减少了设计师和工程师之间的迭代时间。
  • 🔄 通过使用UI框架,设计师可以轻松创建和管理UI视图和过渡效果。
  • 📊 UI框架的建立并非万能解决方案,但确实为工程师和游戏设计师提供了便利。
  • 🔍 尽管UI框架在内部开发,但团队仍然使用其他工具来支持设计和原型制作。

Q & A

  • 为什么构建UI框架对多个团队和项目公司有益?

    -构建UI框架可以统一设计系统,提高设计和实现的效率,减少设计师和工程师之间的沟通成本,同时保持品牌和用户体验的一致性。

  • Natalia Rybrova在游戏行业的经验有哪些?

    -Natalia Rybrova最初作为UI设计师在AAA级项目中工作,后来专注于创建不同类型的免费手机游戏,并在Cyber Games担任UI/UX设计师。

  • Unity UI系统的主要问题是什么?

    -Unity UI系统并不完美,它要求使用C#等编程语言进行高级使用,而且第三方解决方案通常不支持或不适用于移动设备。

  • Cyber Games在构建UI框架时面临的两个主要挑战是什么?

    -设计师在实现过程中缺乏足够的控制权,导致重设计和迭代过程缓慢且要求高;多个团队在开发UI时经常需要解决相似的问题,导致项目间缺乏一致性。

  • Cyber Games的UI框架是如何构建的?

    -基于原子设计方法,将UI视为元素和行为模式的集合,构建了技术统一的组件,可以被定制和组合成模板,然后组合到屏幕中。

  • UI框架中的“切片”(Slice)是什么?

    -切片作为画布、图形和相机的容器,可以构建整个屏幕或屏幕的一部分,如弹出窗口、顶部栏或底部导航栏等。

  • 设计师如何使用UI框架实现UI?

    -设计师可以通过使用预制件(Prefabs)和模板资产(Skin Assets)来快速实现UI,无需编写代码,显著减少了设计师和工程师之间的迭代时间。

  • UI框架如何帮助设计师和工程师更有效地协作?

    -UI框架提供了一种方式,让设计师能够在不编写代码的情况下实现UI,同时允许工程师在需要时提供帮助,特别是在创建复杂过渡或处理数据时。

  • UI框架的“视图配置”(View Config)是什么?

    -视图配置是UI系统的一个配方,它包含了构建和展示视图所需的信息,可以包含一个或多个切片,并且可以在运行时轻松操作。

  • UI框架中的“过渡配置”(Transition Config)有什么作用?

    -过渡配置定义了视图之间的过渡效果,如滑动、缩放等,可以是即时过渡或完全自定义的动画,并且可以跨视图和项目重复使用。

  • 构建UI框架需要多长时间?

    -构建UI框架大约需要一年的时间,由一名工程师全职工作,并在必要时得到其他工程师的支持和建议。

Outlines

00:00

🚀 构建UI框架的益处与方法

Natalia Rybrova介绍了构建UI框架对于游戏公司多团队项目的益处,包括提高开发效率、统一设计系统和减少维护成本。她分享了Cyber Games如何从40人的小团队成长为超过100人的公司,并在这一过程中如何通过构建UI框架来优化UI开发流程。

05:01

🎨 UI框架的构建与应用

Natalia解释了UI框架的构建过程,包括定义可重用的原则和组件,以及如何将这些组件作为预制件(Prefabs)进行组织。她强调了UI框架的灵活性,允许设计师无需编程知识即可实现UI,并且展示了如何通过简单的操作快速创建和调整UI元素。

10:04

🛠️ 提供非工程师的自由

Natalia讨论了UI框架如何赋予设计师更多的自由,使他们能够更深入地参与到UI的实现过程中。她介绍了UI框架中的关键组件,如切片(Slices)和动画目标(Animation Targets),以及它们如何简化了设计师的工作流程。

15:05

🔄 过渡配置与视图配置

Natalia解释了如何使用UI框架中的过渡配置(Transition Config)和视图配置(View Config)来管理和执行UI的过渡和导航。她通过实例展示了如何轻松地在不同视图之间切换,以及如何通过配置来控制UI元素的显示和隐藏。

20:07

🔧 UI框架的执行与导航

Natalia展示了如何在项目中执行UI框架,包括如何通过简单的脚本实现视图之间的导航。她强调了UI框架的易用性,使得设计师能够快速创建动画原型,而无需依赖其他软件。

25:09

📝 UI框架的维护与支持

Natalia讨论了UI框架的维护和支持,包括如何通过内部工具和库来支持UI设计。她提到了团队如何使用Unity UI系统、Text Mesh Pro样式表和其他软件来保持设计的一致性,并分享了对未来技术(如Nested Prefabs)的期待。

30:10

📌 UI框架的未来发展

Natalia提到了UI框架未来的发展方向,包括数据绑定和设计师在UI实现中扮演的角色。她强调了UI框架不仅仅是一个工具,而是一个活的设计系统,能够为工程师和游戏设计师带来诸多好处。

Mindmap

Keywords

💡UI框架

UI框架是一种用于统一设计和实现用户界面的系统,它允许设计师和工程师更高效地协作,提高开发效率。在视频中,UI框架被用来解决多个团队在不同项目中遇到的UI设计和实现问题,通过提供一套标准化的组件和行为模式,使得设计和迭代过程更加快速和一致。

💡原子设计

原子设计是一种设计方法论,它将UI视为一系列元素和行为模式的组合。在视频中,原子设计被用来指导UI框架的构建,将基本构建块(如原子、分子和有机体)组合成更复杂的UI组件。这种方法有助于创建可重用的设计元素,提高设计的一致性和可维护性。

💡预制件(Prefabs)

预制件是Unity中的一种资源,它是一组预先配置好的游戏对象,可以在游戏中重复使用。在视频中,UI框架的构建基于预制件,这使得设计师能够快速组装和调整UI元素,而无需从头开始构建每个界面。预制件的使用提高了开发效率并减少了维护成本。

💡切片(Slice)

切片是UI框架中的一个组件,它作为画布、图形和相机的容器。切片可以构建为整个屏幕的一部分,如加载屏幕或3D模型,也可以作为屏幕的一部分,如弹出窗口或导航栏。在视频中,切片的使用简化了UI的构建和呈现,使得设计师能够更容易地管理和控制UI的层次结构。

💡视图配置(ViewConfig)

视图配置是UI框架中的一个组件,它定义了如何构建和呈现视图(或屏幕)。在视频中,视图配置允许设计师指定视图所需的切片,以及它们的渲染顺序。这种配置方式使得设计师能够轻松地在运行时调整视图,提高了设计的灵活性和迭代速度。

💡过渡配置(TransitionConfig)

过渡配置是UI框架中用于定义视图之间过渡效果的组件。它提供了不同的过渡效果,如滑动、缩放等,并且可以自定义动画。在视频中,过渡配置使得设计师能够为视图创建流畅的动画效果,而无需编写复杂的代码,从而提高了用户体验。

💡导航

导航在UI框架中指的是用户在不同视图或屏幕之间的交互过程。在视频中,设计师可以通过简单的脚本和配置来实现视图之间的导航,这使得设计原型和实现更加直观和快速。导航的简化是UI框架提高开发效率的关键特性之一。

💡动画目标(Animation Target)

动画目标是UI框架中的一个特性,它允许设计师将动画效果应用于特定的UI元素(如切片面板)。在视频中,动画目标的使用简化了动画的复用和管理,设计师可以轻松地为不同的UI元素分配和执行动画,而不受对象命名的限制。

💡技术统一

技术统一是指在多个项目中使用统一的技术解决方案和标准。在视频中,UI框架的构建旨在实现技术统一,确保不同项目中的UI设计和实现遵循相同的原则和架构。这有助于维护整体设计的一致性,同时减少了开发和维护的工作量。

💡设计系统

设计系统是一套包含设计原则、组件和交互模式的系统,它旨在提高设计效率和一致性。在视频中,UI框架本身就是一个设计系统,它提供了一套可重用的UI组件和行为模式,帮助设计师和工程师快速创建和迭代用户界面。

Highlights

构建UI框架对于多个团队和项目公司有益

Natalia Rybrova分享了她在游戏UI设计和UI/UX设计方面的经验

Unity UI系统并不完美,需要C#等编程语言知识

设计师在UI实施中缺乏控制,导致重设计和迭代过程缓慢

多个团队在开发UI时面临相似问题,缺乏项目间的一致性

构建UI框架的目的是统一UI实施层面,提高设计质量

UI框架基于原子设计方法,包括元素和行为模式

UI框架组件技术统一,可以适应不同项目

设计师现在可以不依赖编程实现UI,显著减少设计迭代时间

UI框架允许设计师控制导航和屏幕之间的过渡

UI框架提供了一种方法,使得设计师可以轻松管理和构建视图

过渡配置允许设计师创建和重用动画,无需依赖对象命名

UI框架简化了原型制作,设计师可以直接在Unity中创建动画原型

UI框架的构建不仅仅是为了特定项目,而是一个通用工具

UI框架的开发和维护需要较少的资源和时间

UI框架允许设计师和工程师之间的有效协作

UI框架的开发团队规模较小,主要由一名工程师负责

UI框架的开发周期大约为一年

UI框架支持数据绑定,尽管这一功能仍在开发中

UI框架的实施提高了设计和开发的效率,减少了维护成本

Transcripts

play00:02

[Music]

play00:05

in the next 30 minutes i will talk about

play00:07

why building a ui framework can be

play00:09

beneficial for multiple teams a

play00:11

project's company

play00:12

how to approach

play00:14

the overview of our main ui framework

play00:16

components and about benefits

play00:18

but first i would like to make just a

play00:20

quick introduction

play00:22

my name is natalia rybrova and i started

play00:24

my career as a ui designer in games

play00:26

around nine years ago working on the aaa

play00:28

project but after that i was mainly

play00:31

focused on creating free to play mobile

play00:33

games in different genres

play00:35

and right now i'm a uib ux designer at

play00:37

cyber games but when i joined the

play00:39

company around three years ago we were

play00:41

only 40 employees and had a lot of

play00:43

ambitions to grow

play00:45

right now we have more than 100 we have

play00:47

multiple independent teams working on

play00:49

different projects but during that

play00:51

intensive growth it was very important

play00:53

to restructure the process of the ui

play00:55

development and make it more effective

play00:59

so why build a ui framework

play01:03

several years ago front-end frameworks

play01:05

for web development became very popular

play01:07

and the accessibility of html css and

play01:10

java combined together with the software

play01:12

that allowed designers to turn their

play01:14

mockups into code let them focused on

play01:17

creating unified design systems and

play01:18

design itself rather than on

play01:20

implementation

play01:21

and it was a pretty big step forward

play01:24

but if we're talking about games

play01:25

building unity the situation is a little

play01:27

bit different

play01:28

unity ui system has never been perfect

play01:30

and it requires to know programming

play01:32

language like c sharp for advanced use

play01:35

nc sharp is much more complex in html

play01:38

and the third-party solutions like

play01:41

solutions you can find maybe in unity as

play01:43

a store

play01:44

are usually not well supported or poorly

play01:46

adopted for mobiles

play01:49

and of course

play01:50

some of you can argue and said

play01:52

sure there is still a lot of games that

play01:54

use unity ui so why wasn't it enough for

play01:56

us

play01:57

and we had two main reasons for it

play02:00

and the first reason was that designers

play02:02

didn't have enough control over the

play02:04

implementation

play02:05

and this is the simplified version of

play02:07

the pipeline we had before the ui

play02:09

framework

play02:10

and the implementation part as you see

play02:12

completely belong to engineers mostly

play02:14

because of the complex complexity and it

play02:17

made the process of redesigning and

play02:20

iterating very slow and demanding

play02:23

and because designers didn't have enough

play02:25

control it sometimes led to aesthetic

play02:27

and interaction inconsistency

play02:30

and especially closer to deadlines and

play02:32

we also didn't have

play02:34

a good technical solutions that were

play02:36

unified across the projects

play02:39

and so the second reason was that very

play02:42

often multiple teams had to solve

play02:44

similar problems implementing in

play02:46

developing ui

play02:48

and designs and technical solutions

play02:49

varied

play02:50

and there was no consistency across the

play02:52

projects and you know when it happens

play02:54

player experience suffers and so does

play02:57

the company's brand

play02:59

and besides it was also very time

play03:00

consuming it was very difficult to

play03:02

maintain

play03:03

and

play03:04

teams were less flexible

play03:06

because simply people had different set

play03:09

of skills and

play03:10

problems were sold differently and

play03:12

knowledge sharing is something not that

play03:15

happened that permanently in the

play03:17

companies

play03:19

and so back then we tried different

play03:21

approaches like making ui kids writing

play03:23

specifications making guidelines

play03:26

and the problem was that all those

play03:28

solutions were static deliverables that

play03:30

nobody wanted to use

play03:32

and it was also inconvenient to use and

play03:35

maintain them up to date with limited

play03:37

resources

play03:38

and it also required a lot of

play03:40

communications between designers and

play03:41

engineers

play03:43

and so the third party solutions that

play03:45

improve collaborations between also

play03:47

designers and engineers like for example

play03:49

zeppelin that

play03:51

used in like web design were just

play03:53

expensive and also were not perfect

play03:54

because required

play03:56

some communication between designers and

play03:58

engineers

play04:00

but however we already knew one thing

play04:02

that if we could make an accurate and

play04:04

reusable implementation once we were

play04:07

much more confident in the design

play04:08

quality

play04:09

and it was also very easy to maintain it

play04:11

from one place and then shared it across

play04:13

the project

play04:15

and so that's why to unify our ui on

play04:17

implementation level

play04:19

we started to build our own ui framework

play04:24

how to approach

play04:27

so the first step for us was to define

play04:29

principles and components we wanted to

play04:31

reuse across the projects

play04:33

and the initial idea is based on atomic

play04:36

design approach

play04:38

where like it considers ui as a set of

play04:40

elements and behavioral patterns and i'm

play04:42

assuming most of you like pretty

play04:44

familiar with the concept well basic

play04:46

building blocks like atoms like patterns

play04:49

labels transitions even color palettes

play04:52

can be combined into more complex

play04:54

components like molecules that can be

play04:56

combined into organisms and organisms

play04:59

can be grouped into screens that provide

play05:01

context

play05:02

and since the ui framework we built was

play05:08

meant to support multiple projects

play05:10

it consists of technologically unified

play05:13

components that can be skinned and

play05:15

combined into templates that can be then

play05:16

combined to the screens

play05:18

and reusable behavioral patterns and

play05:20

transitions

play05:21

and visual language was intentionally

play05:25

excluded and moved to a lower project

play05:26

best level because we wanted not just to

play05:29

create a ui system for a specific

play05:31

project but a universal tool that would

play05:33

allow us to create

play05:34

ui system for any project saving time

play05:37

and so after we had defined these

play05:38

principles and components

play05:41

we built them as a prefabs with a

play05:43

hierarchy that made sense for the

play05:45

desirable functionality with the minimum

play05:47

hierarchy and we actually had to rebuild

play05:51

most of the basic

play05:53

components that we already present in

play05:54

unity ui

play05:56

and we actually had to do it because

play05:58

even though ui framework expands unit ui

play06:02

some of the components were not just

play06:03

suitable for us

play06:05

and the main reason was because they

play06:06

were not adapted for mobile

play06:09

and in some complex cases

play06:11

unity ui requires programming knowledge

play06:14

for advanced use and just to illustrate

play06:16

i would like to show you as an example

play06:19

one of the simplest ui framework

play06:21

component

play06:22

like the button

play06:24

and it has an improved structure for

play06:26

providing feedback and it also has

play06:28

moderate hierarchy

play06:30

and one of the biggest differences that

play06:32

we have

play06:33

is that the

play06:34

framework button has a hitbox child

play06:37

object that

play06:38

in

play06:39

basically is invisible image that

play06:40

defines the interaction area for the

play06:42

button

play06:43

and it's placed

play06:44

above the animated part it's placed

play06:46

above with the graphics so it prevents

play06:49

the situation of click not being

play06:50

registered in two cases when we interact

play06:53

with the small size elements in mobile

play06:56

or

play06:57

when due to scaling during the animation

play06:59

for example in the press state when

play07:01

these small elements can become even

play07:03

smaller

play07:04

and just to show you

play07:06

so you can see

play07:08

at the top you can see the unity button

play07:10

and the unity collider scales together

play07:12

with the unity button when i press it

play07:14

and at the bottom there is a framework

play07:16

button and i have a selected hitbox and

play07:19

it stays the same so even i press it it

play07:22

still

play07:23

defines the interactable area for the

play07:26

button and it's the same

play07:29

and so

play07:30

framework buttons use only animators for

play07:33

providing feedback

play07:34

so we don't have an option like

play07:37

unity button that

play07:39

provides like simple feedback like

play07:41

tinting as pride but it's mainly because

play07:44

using animators we can actually create

play07:46

any type of feedback we need and plus

play07:48

it's very easy to reuse animators across

play07:51

the components with the desirable

play07:53

behavior

play07:54

and

play07:55

so

play07:56

the template we use for like framework

play07:59

button has an improved also animator

play08:01

state machine that can be easily copied

play08:03

and adjusted

play08:04

and we improved some transition times

play08:06

and we also added a release non-click

play08:09

state for our buttons and we completely

play08:12

excluded hover state which

play08:14

only caused problems on mobile

play08:18

and

play08:20

other components like radio groups

play08:22

staffs toggles progress bars

play08:25

they all had gone from the same rework

play08:27

process and

play08:30

combined and composed of the library of

play08:32

the template assets

play08:34

there we of course have some special

play08:36

components we developed specifically for

play08:38

the ui framework like view config and

play08:40

transition config i will return a little

play08:43

bit later

play08:44

but instantiated this templates can be

play08:46

skinned animated and extended extended

play08:49

according to specific project style

play08:52

and then they can be added to a specific

play08:54

project style library which is like very

play08:56

custom

play08:57

we call skin assets

play08:59

and

play09:01

their name may be not the perfect one

play09:03

because in skin acids it'll also can be

play09:06

included some components for example

play09:09

like combinations of components with a

play09:11

specific anchoring or hierarchy for

play09:13

different project needs and so it's very

play09:15

easy to instantiate them with one click

play09:18

from a specific window

play09:20

and to show an example how we use it i

play09:24

just want to show you a little video

play09:26

it's not a real game i just made this

play09:29

case specifically for this talk

play09:31

and so

play09:33

i have a

play09:34

preset of a pop-up and i want to fill it

play09:36

with the skinned assets and here just

play09:39

add some list item

play09:41

like two and then i want to for example

play09:44

to add a button just adjust the position

play09:46

[Music]

play09:47

and basically you can see how just like

play09:50

in a second i can create a variation of

play09:53

a pop-up

play09:54

using

play09:55

like this

play09:56

window without going anywhere and

play09:58

looking for anything else i can of

play10:00

course also adjust some sprites or text

play10:03

and

play10:04

we know and we expect this to become

play10:06

obsolete after we start to use nested

play10:09

prefabs but we built the ui framework

play10:13

even before nested prefabs were

play10:15

announced last summer so we were pretty

play10:17

much satisfied with the solution

play10:20

so

play10:21

yeah it was fine for

play10:23

so far

play10:25

and the second reason

play10:27

the second step in building the iframe

play10:29

work for us was to provide freedom for

play10:31

non-engineers

play10:33

and it's actually one of the main

play10:35

benefits of the ui framework because

play10:37

right now designers can implement ui

play10:39

without a big necessity to code

play10:42

and it significantly reduces the

play10:44

iteration time between designers and

play10:47

engineers and also designers get much

play10:49

more involved in the implementation

play10:51

process

play10:52

and the use right now help from

play10:54

engineers only to create complex

play10:56

transitions or just when they need to

play10:58

work with data but even though

play11:00

we right now also work on some solutions

play11:03

where designers also can start to work

play11:04

with data

play11:05

and it's much more easier for them to

play11:08

start testing the aesthetics and

play11:11

and it happens much early in the process

play11:14

and very important to say that it only

play11:18

became possible

play11:19

after we gave designers freedom

play11:22

to work with two main complex areas

play11:26

and these are navigations and

play11:27

transitions between the screens

play11:30

and controlling the rendering order

play11:32

of multiple layers including 3d

play11:35

because let's be honest just to add some

play11:37

sprites in the projects and make layouts

play11:39

in unity it's not that difficult for

play11:41

designers but

play11:43

if we're talking about creating

play11:45

transitions and flows this is where like

play11:47

things get difficult

play11:49

and to dive into the details i would

play11:52

like to present one of our main

play11:54

component in the ui framework the slice

play11:59

and the slices

play12:00

serve as containers of canvases graphics

play12:03

and cameras

play12:04

and a slice can be built as an entire

play12:06

screen like loading screen or

play12:09

3d model

play12:10

or they can be built as a part of the

play12:12

screen like for example pop-up or top

play12:15

bar or

play12:16

bottom navigation bar

play12:18

and so on

play12:20

and so the framework slice template

play12:22

consists of a root object with freeman

play12:24

children and those are cameras graphics

play12:27

and animation targets

play12:30

and let's take a close look

play12:32

at each

play12:34

cameras

play12:35

so the slice template comes with one

play12:37

autographic camera per default

play12:40

it's because it's most commonly used

play12:41

cameras for 2d graphics if you of course

play12:44

we assume that we have our ui is 2d

play12:48

and we can add as many cameras as we

play12:50

want but if it serves a purpose but of

play12:52

course we should be mindful about the

play12:54

performance

play12:56

and the usual case where we need

play12:58

multiple cameras can be when we need to

play13:02

render both 2d and 3d and so we can use

play13:05

autographic and perspective cameras

play13:07

accordingly

play13:09

and so added cameras

play13:11

they just got automatically referenced

play13:13

in the field we called camera list

play13:17

and the order of the cameras

play13:19

uh determines the rendering order and it

play13:22

where this like last camera is rendered

play13:24

topmost and was pretty much inspired by

play13:28

unity render order unity ui

play13:31

and so at the end we can easily build

play13:34

multiple layers

play13:36

operate with them and correctly build a

play13:40

hierarchy just in a short period of time

play13:43

and if i want to change the order of the

play13:44

cameras i just don't need to operate

play13:46

with any values i just need to drag the

play13:49

camera i want to render

play13:50

topmost at the bottom of the camera list

play13:52

and that's it and it's very

play13:55

neat and the designers really like to

play13:57

work with it where they don't need to

play14:00

assign any like camera depth and so on

play14:04

graphics acts as appearance for all the

play14:06

graphics contained in the slice

play14:09

and the children of the graphics expect

play14:11

to be canvases and

play14:14

because

play14:15

it's where the 2d gets rendered and the

play14:18

children on the canvases expect it to be

play14:20

slice panels and this is another

play14:23

ui framework component which is very

play14:25

important for us

play14:27

because slice parents they of course

play14:29

parents of graphics assets for our slice

play14:32

and they are also very similar to your

play14:34

generic unity panel

play14:36

but

play14:36

it has an added component that allows us

play14:39

to associate this panel with a specific

play14:41

animation target

play14:43

and animation targets is actually

play14:46

our favorite feature that we develop for

play14:49

this ui framework

play14:51

because animation targets

play14:53

they propagate animations for our slice

play14:56

panels and this is the way for us to

play14:58

reuse animations across all slice panels

play15:02

in our projects independent of amount of

play15:05

children and naming

play15:07

and if you have ever worked with the

play15:09

unity animation system you probably know

play15:11

how painful it can be to be tied to

play15:13

specific naming if you want to reuse

play15:16

like an animation

play15:18

and it's

play15:19

right now it's possible because it's

play15:21

basically an abstraction layer that

play15:23

allows us to reuse animations because we

play15:25

are assigning just an animation target

play15:28

type to a specific panel so we don't

play15:30

care what's underneath it we don't care

play15:33

how it calls but we just assign the type

play15:37

and i would like of course to go into

play15:38

more details but i would need a longer

play15:41

presentation so let's move on and

play15:44

so

play15:45

to assign and execute these animations

play15:48

we need to use our slides somewhere

play15:51

and for that purposes the ui framework

play15:53

has another component we called

play15:55

viewconfig

play15:57

and this is basically a recipe for our

play15:59

ui system about how to build and present

play16:02

the view or if you can

play16:04

onetech you can call it a screen

play16:07

and so we need to fill in the

play16:09

information the system needs to know

play16:11

about how to build this view correctly

play16:14

and if you can config can include one or

play16:16

multiple slices

play16:18

it has to have at least one slice

play16:21

and slices also can be shared across the

play16:23

views

play16:24

and again the rendering order defined by

play16:27

order like when i

play16:29

like add our

play16:31

my slices in this view config

play16:34

and it's also very easy to manipulate

play16:36

with this view in run time so to

play16:39

illustrate i have another small example

play16:43

so here i have a view config that i

play16:44

called inventory screen and please

play16:47

notice it doesn't have a top bar here

play16:51

and what i need to do is just like in

play16:54

the inspector i just need to add another

play16:57

slice i need to reference it

play17:00

so let's say it's top bar it's the same

play17:02

top bar i have in the character screen

play17:06

and it immediately

play17:08

added this top bar in the inventory

play17:11

screen

play17:12

view

play17:14

so it's pretty easy it's very fast and

play17:17

it really literally takes seconds and i

play17:19

can do it one time so i can reshuffle

play17:22

all my small pieces of my ui and

play17:25

create different combinations

play17:28

so the benefits are the redesign and

play17:30

iterations right now are very fast

play17:34

and once i broke down my ui into like

play17:36

small

play17:37

pieces and assembled them i can combine

play17:39

different

play17:41

setups and it's just a matter of seconds

play17:44

and the render order of the slices

play17:46

in the view config defines the rendering

play17:48

order

play17:49

and it's also very easy to show or hide

play17:51

previous views it's just like a matter

play17:54

of ticking the checkbox so if i want to

play17:58

hide the previous view behind the pop-up

play18:00

i just opened i can just easily do it

play18:03

and

play18:04

after we have defined the view the ui

play18:07

systems knows what to show but it

play18:09

doesn't know how

play18:11

i mean in the previous example it

play18:12

already knew how but for knowing how it

play18:15

needs another component that we call

play18:17

transition config

play18:19

and the ui framework provides transition

play18:22

examples for different configurations

play18:25

like sliding

play18:27

scaling it can be instant transitions or

play18:29

it can be absolutely custom animation

play18:32

and after that all these transitions can

play18:35

be copied adjusted and

play18:38

they

play18:39

can easily be assigned for every view

play18:42

config

play18:44

and so to show this

play18:47

also a small example how we use

play18:48

transition configs

play18:50

so here i have a pop-up with settings

play18:53

which has an animator pop-up transition

play18:55

config

play18:56

and it looks like this so you see the

play18:58

background fading

play19:01

like pop-up is scaling

play19:03

and what i want to do is just change it

play19:05

to the slide right transition config

play19:08

that i created before

play19:09

like both hiding and showing and as you

play19:12

can see immediately will

play19:14

apply the changes

play19:19

so the benefits

play19:21

of the transition config

play19:23

so the main one is that it operates with

play19:26

the whole slice panel through the

play19:28

animation target which is again an

play19:30

abstraction layer that allows us to

play19:32

reuse animations across all slice panels

play19:35

without depending on object naming

play19:38

and

play19:40

they can be also reused not only across

play19:43

the views but also can be reused across

play19:45

the projects

play19:46

so if we work

play19:48

with multiple projects that want to

play19:50

reuse the specific transition between

play19:53

the screens we can easily do it without

play19:55

like redoing it again and again

play19:58

and it allows us to create different

play20:00

combinations of animations for multiple

play20:02

slice panels in one slice so as you

play20:07

saw before i had like a combination of a

play20:09

background that just was fading and the

play20:12

pop-up content was scaling and it's

play20:15

possible because i just broke down

play20:17

my

play20:18

content to two slice panels which has

play20:21

two different animation target types

play20:24

and so

play20:26

right now i just would like to show you

play20:28

how we execute animations or navigations

play20:32

using the ui framework

play20:34

because i mentioned it is very easy just

play20:36

to create flows

play20:38

and this is also just a small

play20:42

example

play20:44

so now i'm just running a project

play20:46

and i have a starting prefab where i can

play20:49

assign my starting view

play20:51

and right now it's a splash screen

play20:53

kind of a splash screen i can use any

play20:57

and as you can see

play20:59

this has a

play21:00

view has a button a start button right

play21:02

now it does nothing

play21:04

but

play21:04

let's assume i would like to execute

play21:07

navigation to another screen

play21:09

the character

play21:10

and so what i need to do is just to find

play21:12

this button in the hierarchy

play21:15

and i need to add one navigation script

play21:20

and

play21:20

then i will have a field with animation

play21:23

target this i am adding a view i want to

play21:25

navigate it's like gtc start u

play21:28

and then i just need to add a function

play21:31

navigation

play21:32

execute navigation

play21:34

and that's basically it and i didn't

play21:36

touch any transitions so it will happen

play21:40

instantly

play21:41

let's just press apply

play21:47

and i can operate it like with any

play21:49

button so

play21:50

press and navigation happens

play21:53

so as you can see it's super fast it's

play21:56

very easy for designers to just start

play21:59

create these views

play22:01

and

play22:02

it's not only fast but right now

play22:05

i'm doing the uh

play22:07

animated prototypes not using other

play22:09

software like before i use like

play22:11

principles and principle in sketch

play22:14

but

play22:15

right now i'm just using unity because

play22:17

it's so much easier and the result looks

play22:20

like the final result

play22:22

and just to make a quick

play22:24

maybe recap i would like to

play22:27

yeah

play22:28

to say that your dui framework is built

play22:31

around this concept of navigations

play22:33

between the views that reference slices

play22:36

and navigations are requested to be done

play22:38

between the views and views can

play22:40

reference one or multiple slice and

play22:43

slices are responsible for containing

play22:45

graphics and logic

play22:47

and in specific cases like slice panels

play22:49

and animation targets

play22:52

and slices can be included in one or

play22:54

multiple views

play22:55

and they can be shared across

play22:58

and the navigation transitions right now

play23:00

can be built by a designer

play23:02

and once they build they can be easily

play23:05

reused across the views and also across

play23:07

the project

play23:08

and it's easy to start prototyping

play23:11

inside the project saving time

play23:15

technical unification so interaction

play23:18

design principles and basic ui

play23:21

architecture is unified to maintain the

play23:23

holistic design

play23:25

and is very much less time consuming and

play23:28

requires less resources to develop and

play23:29

to maintain

play23:31

so we have right now like one or two

play23:34

dedicated engineers that help

play23:36

us to

play23:38

maintain the ui framework

play23:41

it's also much easier to drive the ui

play23:43

innovations so once

play23:45

a good solution is found and implemented

play23:47

in the ui framework

play23:49

all the projects got the benefits of

play23:50

using it

play23:51

and of course in-house development

play23:53

allows us to adapt it very fast to all

play23:55

technical needs and not wait and

play23:58

yeah it's just

play24:00

really nice

play24:02

but of course it's very important to

play24:04

remember that building a ui framework is

play24:06

not just a silver bullet

play24:08

and

play24:10

we still complement it with other tools

play24:12

and just to give you an example that

play24:16

we still use like text mesh pro style

play24:18

sheets for coherent typography so it's

play24:20

like

play24:21

the place we control all the text styles

play24:24

for the projects and we can easily

play24:26

adjust it and then we'll propagate the

play24:28

changes across all the textiles we need

play24:31

we work with the decelerated assets and

play24:34

we use unity

play24:37

color color library

play24:39

and easy very easy to adjust these color

play24:42

palettes and it will also propagate the

play24:44

colors across all the assets yes with

play24:47

the nested prefabs it will be much

play24:48

easier and we're also waiting for it

play24:51

and

play24:52

yeah we also draw all our assets

play24:54

disregarding the project style in vector

play24:57

and we are working right now on

play24:59

integrating nswg importer to unity

play25:02

and to support the original assets

play25:04

inside the project so

play25:06

we can always have original assets

play25:08

inside the project and keep them up to

play25:10

date and

play25:12

if we need to correct something we just

play25:14

need to open it from unity project and

play25:16

save it back

play25:18

and

play25:19

we still use unity

play25:21

ui systems in sketch and we still use

play25:24

other software for creating prototypes

play25:26

especially in the concepting phase so

play25:28

there are still a lot of things that

play25:31

support

play25:32

our ui framework

play25:34

and so

play25:36

at the end i just want to say so

play25:39

it doesn't matter how you build your

play25:40

yoif frame framework but having a living

play25:42

design system of components interaction

play25:45

patterns inside the projects can give

play25:47

you a lot of benefits

play25:49

and it's

play25:50

not right now for our engineers or game

play25:53

designers to start to use this ui

play25:55

framework

play25:56

and start creating good looking screens

play25:58

just opening the project because all the

play26:00

guidelines

play26:02

are already inside it you don't need to

play26:04

go and look to other guidelines so like

play26:06

re-documentation

play26:08

and

play26:09

of course first of all ui framework for

play26:12

us was a

play26:13

time-saving measure that allows our

play26:15

designers to focus on research design

play26:18

and testing rather than on

play26:20

implementation

play26:22

and i think that's it

play26:23

thank you so much for listening

play26:25

[Applause]

play26:29

i think we have some time for q a

play26:31

just

play26:32

four minutes maybe several questions if

play26:34

you have

play26:44

i have a small question if i may

play26:47

um

play26:48

could you share with us

play26:50

like how big was the team developing the

play26:53

ui framework or how much time did you

play26:55

guys take to develop that framework

play26:58

yeah actually

play27:00

we

play27:01

had

play27:02

one year of one engineer's time that

play27:04

worked dedicated like work on this thing

play27:08

with the support sometimes and advices

play27:10

from others engineers

play27:13

but mostly yes it's a one engineer that

play27:16

helped of course

play27:17

you shouldn't probably just put the ui

play27:20

framework on engineers because they

play27:22

don't want to work with ui usually

play27:25

but yeah it's it's not that much it

play27:28

wasn't too bad

play27:29

thank you

play27:30

of course

play27:39

hi hi yes i would like to know if you

play27:42

came up with the need to

play27:44

make debugging tools for

play27:46

your ui framework

play27:49

i mean

play27:51

we i mean it it all happens inside the

play27:55

tools team so the engineer who worked on

play27:58

ui framework

play27:59

is a was a part of the tool stem and we

play28:02

still have like a bigger thing for our

play28:05

internal components

play28:06

and

play28:08

inside this thing this uh like i mean

play28:10

the question was um because if

play28:13

the

play28:16

you know

play28:17

sorry the designers and these other

play28:21

persons in the team who doesn't have the

play28:23

technical skill

play28:25

and maybe they

play28:27

have problems and

play28:29

you have to go to the programmer who

play28:31

make the tool for

play28:33

support i mean if you have that kind of

play28:35

problems in your project now the thing

play28:38

is our teams are pretty small and

play28:41

we have usually one ui ux designer per

play28:44

team

play28:45

so

play28:46

we

play28:48

yeah i mean if something is wrong it's

play28:51

very easy to communicate so

play28:54

i think our ui ux designers like tested

play28:57

to like themselves

play28:58

usually yeah

play29:04

i know that we use a similar system okay

play29:07

but um especially with transitions yeah

play29:10

um and input i know there's

play29:12

if you oh qa really love to just keep

play29:15

tapping things so how does it know what

play29:17

the top most one is so if you

play29:21

have like the slide transition and push

play29:23

push the button to open it and then push

play29:25

it again

play29:26

because they're like

play29:27

um like does it know what the

play29:31

most

play29:32

so the

play29:33

rendering order defined by order i

play29:35

placed the slices in this view list so

play29:39

if i want to change it i just can drag

play29:41

it

play29:42

like it's

play29:43

that's the beauty of it because it's

play29:45

just super easy you don't need to like

play29:48

mess with numbers or anything so so the

play29:50

ui well if you tap anywhere on the

play29:53

screen it'll know

play29:54

like don't interact with the screens

play29:57

behind

play29:58

yeah did i run it okay of course yeah

play30:01

it's just completely different view so

play30:03

if you navigate to another view it just

play30:05

open we just can

play30:07

choose to show or to hide the previous

play30:10

but you won't be able to interact yeah

play30:12

we also like

play30:14

i remember this thing

play30:17

hi hi um i was wondering you mentioned

play30:21

uh data bindings and how you plan to

play30:24

rule out sort of yeah it's in the plans

play30:27

can you elaborate or is it still

play30:29

something very yeah it's still in our

play30:31

plans actually because

play30:33

it's not something that you you we're

play30:36

already testing it but

play30:38

i wouldn't like go into my explanations

play30:41

it's yeah but it's still in development

play30:43

right now all right yeah i understand

play30:44

thank you but it's definitely will

play30:47

make our lives much easier

play30:51

i think this was the last question

play30:55

yeah i think we can continue in the

play30:57

whole if you want you're very welcome

play30:59

thank you so much again

Rate This

5.0 / 5 (0 votes)

Related Tags
UI框架跨团队协作游戏开发设计系统技术统一设计师自由迭代速度原型制作内部工具技术需求
Do you need a summary in English?