Raspberlyのブログ

Raspberlyのブログ

Unityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。そろそろブログタイトル決めたい

【勉強会レポ】: Unity道場11月〜新機能・UIElementsと新しいInputSystem〜

勉強会のレポート(メモ)です。
参加したのはこちら「Unity道場11月〜新機能・UIElementsと新しいInputSystem〜」
会場はユニティ・テクノロジーズ・ジャパンさんです。

meetup.unity3d.jp

ハッシュタグ : #Unity道場

f:id:Raspberly:20191127015010p:plain

 

動画はこちら

www.youtube.com

 

スライドなどは後日Learning Materialsで公開されます。

learning.unity3d.jp

 

 

 

 

 

1. UIElements+UI BuilderでEditor拡張を作ろう

エディター拡張はかつてはC#で書いていましたがこれには問題点があった。
・レイアウトの調整が複雑
・ちょっとした変更でも毎回コンパイルがはいる

なのでUI Elementsができました

 

UI Elements

新しいUIシステムです。2019.1からExperimentalが外れました。
Editor拡張とランタイムでも動くことを予定しています。(ランタイムではまだ動かない)
Webに近い設計でパフォーマンスもよい

3つの要素

3つの要素で構成されています

・構造を表すUXML
 HTMLのタグうちに近い

・スタイルを表すUSS
 スタイルシートです

・ロジックのC#
 XMLを読み込んで配置します

それぞれの関係性関連性

UXMLはボタンやラベルを定義します。
USSはボタンやラベルの細かいスタイル(フォントサイズなど)を記述。
C#はデータを読み込んで配置します。

 

 

UI Builder

UXMLやUSSを手打ちしなくてもUIを作れるツールです
現在はPackage Managerからprevireで使えます

ここでデモタイム(動画を見てね)


これからのEditor拡張はレイアウト・スタイル・ロジックが分離する。
レイアウト・スタイルはUI Builderで。

 

 

UI Elementsの応用編

いろいろな機能があります

UI Elements Debugger

デバッグするためのツール
実行中のUIの構造を見ることができます
簡単な編集ができます

IMGUI Conteiner

昔作ったプログラムを動かしたり、
従来のエディター拡張を併用して使うことができます。
Unity Editorでも使われています。

Custom Property

USS側に独自の要素を置ける機能
UXMLに直接書くのではなく、USSに埋め込む
ただしこれは少し複雑、これ以外にも下記の方法もあります。

独自のElementを作る

VisualElementを継承したClassを用意して、
独自のProperyを追加してどのように解釈するかをC#コードで書いてあげる方法
ここで作ったパーツはUI Builderでも認識されます
一度作ってしまえば他のプロジェクトに持っていくこともできます

まとめ

・UI ElementsをもってEditor拡張できる
・Webに近い形でできる
・IMGUI Conteinerで古いやり方を使うこともできる
・独自のものを作ることができる
・UIElements Debuggerとても便利

 

質疑応答

データバインディング機能は将来できますか?

特に聞いてないです。エディター専用ですがバインディング機能はあります。

9 silceをはじめ、表示できるコンポーネントは増えていく?

全部搭載されるかはわからないが、増えていきます。

Graph Viewはランタイムでも動く?

わからない

現状UIを作るベストプラクティスは?

できるならUI Builderでやったほうがいい、ただしXMLじゃないとできないこともある

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. 新しいインプットシステムの使い方

事前アンケートではほとんど誰も使用していない

Input Systenとはなんぞや

2019.3でpreviewが外れた新しい入力システム
Packageから導入します。

キーを押してログを出すくらいなら簡単です。
しかし複雑になるとつらい、キーコンフィグもめんどくさくなります。

 

Input System的な入力制御

現状使う場合はC#で使いますが、デバイス側の入力はC#で知っておく必要はありません。

 


設定は設定ファイルで行います。用語がややこしいの解説します。

Control

バイスの入力の値。

Input Action

プレイヤーのやりたいこと。移動や攻撃など。

Input Action Map

Input Actionをまとめて管理するもの
このMap自体をオンオフすることで、メインシステム戦闘モードまたは通常モードに移行しますといったふうに操作形態を切り替えることができます。

 

使う流れ(準備)

Input Action Mapを用意、プレイヤーのアクションごとにInput Actionを用意します。
InputとControlをバインドします。

使う流れ(使う側)

InputActionから入力情報を取得するだけ

 

ここでデモ(動画を見てね)

 

フレームレートとのギャップをなんとかする

コントローラーはゲームと比べフレームレートが高い。
そのため、入力をが落ちることがある
(これに対処するにはゲーム側のフレームレートを上げるしかない)

 

そこでInput Systemは中間バッファを持っています。
入力情報を格納してフレームレートの最後に渡します。
ちなみに、このバッファはクリアしなければ残るため、フレームをまたいで取得することもできる。

 

モバイルのInput System

Input Systemは多くのデバイスに対応していますが、タッチパネルには問題があります。
バーチャルパッドを使ったりする場合、TouchScreenPosotionからしか入力が取れない。

 

OnScreenControlというUIの入力とInput Systemをバインドする仕組みがあります。
uGUIで入力を取得して、InputSystem用にそれを上書きすることができます。

 

ここでデモ(動画を見てね)

 

 

ローカルマルチプレイ

今までのUnityとは違い、Input Systemなら大分楽にできます。
Player Indexを割り当てればよい。

 

ここでデモ(動画を見てね)

 

分割も楽にできるが問題もある。
PlayerInputが初期化した順番でindexが割り当てられるため、コントローラーと一致しない場合がある。
これに対しては、playerindex とキャラクターを一致させましょう。
キャラクター自身にPlayer Indexを取得させるなどの処理が必要です。

 

本日のおさらい

・キーボードからの取得は簡単にできる。
・入力のInputActionにControlをバインドさせ取得する。
・バッファを使用してフレームレートのギャップを踏めることができる。
・uGUIなどの入力をInput System用に上書きできる。
・PlayerInputを使えばローカルマルチプレイも簡単。

 

質疑応答

Unityアプリ起動時のキーコンフィグはどうなったの?

なくなりました。ランタイムで読み込むことができるのでキーコンフィグは自分で頑張ってください。

Action Mapは階層構造を持たせたり、一部を変えたりできる?

階層構造はないが、自由に変更することはできます。

GravityやThresholdの設定はできますか?

ThresholdやDead Zoneは設定であります。

プレイヤーが奇数人の場合、画面分割はどうなる?自由に変更できる?

現状その機能はない、今後追加されるかはわからない、自分で頑張ればなんとかなる。

VRの対応もしてますか?

してます。いろいろ対応していますし、自分でコントローラーを作ることができます。
ここも全部拡張可能です。

コントローラーを複数つないだ時にJoin Numberを取得したり設定することはできますか?

わからない、できるかもしれないしできないかもしれない。

 

 

 

 

 

 

懇親会

f:id:Raspberly:20191127015111p:plain

f:id:Raspberly:20191127015131p:plain



 

 

告知タイム

meetup.unity3d.jp

prodevelopers-gamejam.connpass.com

inter-high.unity3d.jp

 

 

 

 

 

ユニティちゃんクラウドファンディング

f:id:Raspberly:20191127014857p:plain

ユニティちゃんフィギュア化プロジェクトのクラウドファンディングを記念したパネルが設置してありました。
こちらのクラウドファンディング、来年の1月までやっているので興味のある方はどうぞ。

motion-gallery.net

 

 

 

 

 

 

タイムライン

 

 

 

 

 

間違っている箇所、消してほしいツイートがありましたらコメントにお願いします。