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

 

 

 

 

 

 

タイムライン

 

 

 

 

 

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

【勉強会レポ】: yokohama.unity #0

勉強会のレポート(メモ)です。
参加したのはこちら「yokohama.unity #0」
会場は総合学園ヒューマンアカデミー横浜校さんです。

yokohamaunity.connpass.com

ハッシュタグ : #yokohamaunity

f:id:Raspberly:20191122010417j:plain

 

 

 

 

LT.1 ピアノアニメーションの自動生成

楽曲データからデータの取り出しについてと、アニメーションの作成について。

Midiファイルとは

MIDIの演奏データを記録するための音楽ファイル。
Midiファイルにはいろいろ情報が入っていますが、ピアノの運指の情報が入っていません。
※運指については長くなるので今回はすでにあるという前提で進めます。

Midiファイルはぎりぎり読むことができます。

アニメーション化

FinalIKを使用しました。

※FinalIKの設定方法についてはスライドを。

まとめ

Midiファイルの解析とアニメーションの作成ができました。

今後

別の楽器だったり、モデルの適応を簡略化したい。

 

 

Unite Eve2 LT Fesにて近い内容のLTがありましたので、こちらもどうぞ。

raspberly.hateblo.jp

 

koniroiris.hatenadiary.com

 

 

 

 

 

LT.2 Azure PipelinesでCIしてみよう

個人的に試した内容です。

CIとは

継続的インテグレーション
ビルド、テストを自動化し高頻度で実行する手法。

CDとは

CIの流れのついでにビルドしたものをQAtん当社に配信したりstoreにアップロードしたりすること。

CIとしてどんな選択肢があるか

UnityCloudBuild

シンプルで一番簡単
team advanced契約が必要です
シンプルなことしかできないので特殊なビルドパイプラインは組めない

Jenkins

一番メジャーなCIサーバ
運用が大変なためつかれてしまう
ゲーム業界ではいまだに根強いが、Jenkins離れも

Azure Pipleline

workerとしてMicrosoft-hostedかSelf-Hostedを使用できる(Jenkinsのmasterを立てなくてよい)
今回はSelf-Hostedを使用します。

 


ここから先は飛ばし気味に行きます。詳しくはスライドをどうぞ。

 

 

 

 

 

 

LT.3 ゼロから作るゲーム

 

カジュアルゲームを作るときにやっている手法の紹介です。

最初にやること

仕様書づくり
設計をしながら仕様書をつめる

仕様書をつめる方法はゲームオーバーを考えるだけ

ゲームオーバーはそもそもなんなのか
3つ考えてきました
・ライフポイント制
・タイム制
・課題製

今回はライフポイント制を採用しました

ゲーム性を考える

・ハイリスクハイリターン
・ローリスクローリターン

リスクを冒してリターンを得ること
駆け引きがゲームの本質である

ユーザーとユーザーをつなげる

結局のところダウンロードしてもらわないと始まらない。
ランキング機能を実装すればとりあえずつながりができます。
オススメはNCMB

画像シェア機能を作ってくれた方がいます、こちらも参考にどうぞ。

github.com

ゲームを配信しよう

みんなが遊べる状態をつくることが大事
それを意識するために、ゲームの完成ではなく配信を目的にしましょう。

 

今日はここまで、続きはQiitaに書きます。

 

 

 

 

 

 

LT.4 klakNDIを使ってネットワーク経由で描画結果を送受信してみた

NDIとは

ネットワークデバイスインターフェース
ネットワーク経由でビデオを送信できる技術
映像業界向けの技術です

 

SDKが無料で配信されていて、

www.newtek.com

これをUnityで使うライブラリもあります。

github.com

 

 

ここでデモタイム

 

使いどころはライブ配信やゲーム実況、VJなど
個人ですとOBSにNDIを使えるようにするプラグインもあったりします

注意点

Windowsはファイアーウォールの設定が必要
・KlakNDIはAndroidは非対応、IOSは送信のみ
・ちゃんとした通信環境が必要

まとめ

・NDIというものがある
・Unityにも組み込める
・ゲーム実況にも使える

 

 

 

 

 

 

 

LT.5 AzureKinectをちょっとだけ「Unityで」触りたい話

AzureKinectの話をします。
これは来年3月に日本でも発売されますが、先行して入手したので今いろいろ触っています。

AzureKinectはなにに使えるのか

いろいろセンターがついています、
RGB、デプス、加速度、ジャイロなどなど

なんでAzureKinectでやるのか

最近はデバイスがブームでガジェットからトレンドが始まりやすい

 

前提条件

基本はWindows
Unity2018 19以降
SDKは1.10以降がよい
SenserSDKbainariはインストールしたほうがいい

 

内容が濃いので詳しくはスライドをどうぞ。(まだ未公開)公開されました。

 

 

 

 

 

 

 

 

 

LT.6 展示会のススメ

個人開発の悩みは展示会で解決できます。

展示会のよいところ

・ユーザーがプレイするところを見て改善点を見つけることができる。
 1ユーザーのプレイは8時間の個人デバックに相当します。

・他の開発者さんと交流ができる。
・お仕事につながるケースがあります
・細かくさわってもらって頻繁な軌道修正ができる
 ユーザーからのフィードバックがモチベーションにもつながります

展示難しそう

プレイアブル(遊べる形)であれば大丈夫
完成に向けたアイデアがいろいろもらえます

審査は?

最近は審査のない展示会もいっぱいあります

 

 

 

 

 

 

 

ForkwellさんPR枠

スポンサー様の紹介。またでたなforkwell

Forkwellとは

エンジニアの応援団をしています
キャリア支援、転職支援をしています

エンジニアがキャリアアップするために

市場の評価と社内の評価を高く保つ必要があります。

市場の評価を確かめるには勉強会懇親会が一番良い。
しかし毎日やってはいない。そこでスカウトがオススメ!
Forkwellではスパムがこないスカウトサービスを作りました。
今回特別キャンペーンをやっているので登録よろしくお願いします。

jobs.forkwell.com

 

 

 

 

 

懇親会

f:id:Raspberly:20191122010514j:plain

 

 

 

 

 

 

タイムライン

 

 

 

 

 

 

 

 

 

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

【勉強会レポ】: Gotanda.unity #14

勉強会のレポート(メモ)です。
参加したのはこちら「Gotanda.unity #14」
会場はZIZAIさんです。

meetup.unity3d.jp

ハッシュタグ : #gotandaunity

f:id:Raspberly:20191121000650p:plain
会場提供はZIZAIさん。
懇親会提供はキッズスターとワンダープラネットさんです。

 

 

 

 

超短時間企業紹介

キッズスター

ごっこランドをリリースしています。キッザ〇アみたいなやつです。

おかげ様で好評です。
基盤側の整理が追い付いていないので一緒に働いてくれる方募集しています。

www.wantedly.com詳細は@monryまで。

 

ワンダープラネット

クラッシュフィーバーとかジャンプチヒーローズを世界に出しています。

Nagoya.unityUnity Designer's Cafeもやっています。
wantedlyの方で会社紹介しているのでよろしくお願いします。

www.wantedly.com

 

ZIZAI

zizai.co.jp

 

 

 

 

LT.1 macOSとかでもQuestをリモートしたいんだよ

 
MacOSでもOculusQuestを使えるよう、「A-npanRemote」というツールを作ったというお話。
詳しくはスライドをご覧ください。

github.com



 

 

 

 

LT2. いつか使えるKotlin/Native With Unity

Kotlin/Nattiveでマルチプラットフォーム向けにばいなりなり実行ファイルを書きだせるころ

ここからkotlinでunityネイティブプラグインの共通化できるんじゃないかと考えました

やりたいこと

1.Kotlin/Nattiveでunityネイティブプラグインの共通化
2.http2通信
3.ライブラリを使えばどういう機能が手軽にできるか知りたい

できたこと

1.ネイティブプラグインの共通化はできた。
2.http1.1通信はできたが、時間が足りずここまで
3.Ktorというものを使ってみた

まとめ

・Kotlin/Nattiveはとりあえず動きます
・需要はよくわからない
・需要やパフォーマンス、フローが緩和されたらいつか使えるかも

検証リポジトリ

github.com

 

 

 

 

 

 

 

LT3. アンチパターンから学ぶUnityの使い方

public変数問題

インスペクターから初期値を変えられるし、外部から書き換え可能なので結構トラブルが多い。

解消方法

SerializeFieldを使いましょう、publicは極力避ける
Getterは公開してもいいが、Setterはメソッドを用意しましょう

publicを利用ケース
データ構造の表現にはいい

PrefaのSerializeField問題

何でもインスペクターで設定してしまうと依存関係がめちゃくちゃになる

解消法

自分より上の階層にあるオブジェクトをインスペクターでつけちゃまずい
依存性についてはきちんと設計しましょう。

Awake/Start問題

初期化処理でAwakeとStartの実行順に依存性が生じる
(Awakeより前にStartが呼ばれるとダメな状態など)

解消法

初期化は初期化用関数を用意しきちんと管理しましょう。
使わない関数(Awake/Start/Update)は消す。

補完関数問題

Lerp/Slerpは内分点を計算する関数で、deltaTimeの割合で少しづつ目標に近づく。
そのため、無限時間をかけないと最終値にはならない。

解決法

ドキュメントを読んで使い方を理解しましょう。
第三引数を0.0~1.0に変化するコードにする。

Shader問題

ピクセルシェーダーは重い
if文や三角関数、Log/Sprtなど

解消方法

if文は軽量な数学関数で表現。
三角関数は予め計算しテーブルを作成しておく。
logや平方根は使わない。

 

まとめ

ドキュメントはちゃんと読みましょう
設計をちゃんと考えましょう
パフォーマンスは気にしましょう

 

 

 

 

 

 

LT4. Firebase Remote Config for JavascriptWebGLビルドしたゲームへ導入してみる

Firebase Remote Config for JavascriptWebGLビルドしたゲームで使う話をします。
詳しくはスライドをご覧ください。

firefox remote configとは

remoteで変更できるconfig
リリース無しでアプリ内の設定を変更できる

やりたいこと

WebGLビルドしたゲームにFirebase Remote Configを入れてA/Bテストしたい

なぜJava Script?

Firebase for unityはWebGLビルドに対応していないため

まとめ

jsライブラリを使いたい場合はこういう方法もある
unityroomにいれるには工夫が必要

 

 

 

 

 

 

LT5. ハイクオリティなゲームを1週間で作る7つの極意

unity1weekでゲームを作りきるテクニックを紹介します

 

初日にゲームループを完成させる

・そのままリリースできる状態を最速でつくる、その後はブラッシュアップをするという認識。
・企画をシンプルにする

事前準備

ゲーム本編以外のゲームループを完成させる(タイトル画面やリザルト画面、ランキング、ツイート機能など)

アップロードフローの確認

前日からビルド->アップロードの流れを確認しておく。

ビルドは毎日する

できるだけ早めにアップロードまでやっておく。
CloudBuildは神サービスなのでおすすめ(要課金)

公式Package Assetを活用する

よく使う公式アセット

URP(LWRP)
PPS V2
TextMesh Pro
Mathematics

よく使うアセット

Unirx
Zenject (アセットストアからは削除済)
Rainbow Folders2
Procedural UI Image
Rewired

github.com

デザインのコツ

・UGUIのデフォルトボタンはださいのでやめましょう
・余白は大目に開けよう

シェーダーを活用する

シェーダーグラフがお手軽なので活用しましょう
ノードベースなので短時間で作成できます

設計に気を配る

SOLID原則を活用しましょう

まとめ

自分はゴリラでないという自覚を持ちましょう
そのままリリースできる状態を初日に作る

 

 

 

 

 

 

 

LT6. VRMアバターで自撮りが出来るカメラアプリを開発する過程で得た知見

VRMアバターで自撮りアプリを作った時の知見についてお話します。

開発環境

Unity 2019.2.9f1
AR Foundation preview.4 - 3.0.0

AR Faundationの学習方法

公式が出しているサンプルが勉強になります

github.comプレビュー版はバグがあるのでIssuesやChangelogを追うと良いでしょう

背面カメラと全面カメラの同時使用

カメラ同時使用時にアバターを表示する

位置調整

スマホ自体を傾けた時にキャラクターを動かす

光の推定

背景と3Dの描画をなじませる

おまけ

入らなかったトピックはまとめています
後でqiitaで公開します

 

 

 

 

 

 

LT7. UnityMLでオンラインゲームのNPCを作った話

IOゲームとは

ブラウザ発症のオンラインゲーム
多人数のユーザーで競い合うゲームです

作ったゲーム

超音波で「探す」ゲーム

unityroom.com

NPCから開発したほうがいい理由

オンラインゲームでは常に人がいることが大事、最初はNPCがあるとよい
キャラクタークラスが人間/NPC両方から入力を受けれるよう作ることで入力まわりがきれいになる

擬似オンラインゲームのデザイン

CPUはプレイヤーと同じ立場にさせる
シンプルな入力と相まって人が操作しているように見える

超音波のゲームデザイン

近くにいる時が一番楽しいので、遠くの時は近づきやすいようにしています。
近くに来たら攻撃に切り替える。

ML Agentの紹介

unityが提供する強化学習用ライブラリ
マルチプラットフォームに対応らしい

宣伝 Roppongi.unity #6

roppongiunity.connpass.com

Gotanda.unityと同じ会場に行います。
渋谷は五反田であり六本木である

 

 

 

 

 

 

LT8. タイルマップ拡張のススメ 

タイルマップのお話

タイルマップめんどい問題

用意するタイルが多くてめんどい

実際は、たくさんあるタイルでも重複部分があるのでその分削ることができます。

パレットから選ぶのがめんどい

タイルマップはAPIで拡張可能
今回作ったものはアセットストアで出しているのでぜひ使ってみてください。

タイルマップのはまりどころ

TilebaseはScriptableObjectな点に注意

 

 

 

 

 

 

 

 

LT9. Oculus Questでいつでもどこでも運動できるゲームを作ろう

腕を鍛えよう

サンタシミュレーターというVRゲームを作りました。
鹿(3K)にOculus Touchをつけて腕を鍛えることができます。

 

銀座VRにて展示されていました

 

合体事故に気を付けよう

オキュラスタッチのセンサーが重ならないようにしましょう。

足を鍛えよう

ここでOculus Touchやゴーグルの加速度を使います。
足にTouchを括り付け、走る動きをするとVR空間内で実際に動く作品を作りました。

 

※参考資料

qiita.com

おまけ

リングフィットをvrでやりたい・・・
Oculus Touchとリングフィット アドベンチャーのリングを合体させました。

 

 

 

 

 

 

 

懇親会

f:id:Raspberly:20191121011815p:plain

 

 

 

 

 

 

告知タイム

Unity お・と・なのLT大会 2019

meetup.unity3d.jp

 

ProDevelopers GameJam #2

ゲーム業界に所属している"プロ"が集まって1日で行うGameJamです。
まだイベントページはできていませんが、12月14日にやる予定です。

 

マスコットアプリ文化祭

アプリのコンテストです。まだまだ期限までには間に合うのでぜひご参加ください。

mascot-apps-contest.azurewebsites.net

docs.google.com

 

 

ツキササリーナ

 

バイナリーファイター

 

 

 

 

 

 

 

タイムライン

 

 

 

 

 

 

 

 

 

 

 

 他の方の感想ブログとか

maketake.hatenablog.com

 

 

 

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

【イベントレポ】: デジゲー博2019

イベントのレポート(メモ)です。
参加したのはこちら、「デジゲー博2019」

digigame-expo.org

ハッシュタグ#デジゲー博

f:id:Raspberly:20191117230907j:plain

 

 

 

 

デジゲー博とは

インディーゲーム&同人ゲームをメインとした展示・即売会です。
スマホゲームだけでなくPCゲーム、VRゲーム、
アーケードゲームと幅広いプラットフォーム、ジャンルがそろいます。

一般参加者としては、ゲーム体験だけでなく他参加者との交流や、
自分のモチベーションアップなどにつながるいい機会になります。

 

前回のレポはこちら

raspberly.hateblo.jp

 

 

 

 

 

 

 

前回同様、特に予定なくブラブラ歩いて目に留まったもの、タイミングよく人が空いた所にお邪魔しました。
早めに来ましたがさすがに全部体験は無理でした。

 

※以下体験させていただいたサークル及び作品の紹介です。(並びは順不同)
※掲載している写真は全て許可を得て撮影しています。

F-05ab MachineClad

f:id:Raspberly:20191117221114j:plain

ACVD風ロボットアクションゲーム「MACHINE CLAD」を体験させていただきました。
戦闘UI、挙動、メニュー画面、ガレージと非常にこだわりが見える作品です。
アリーナ形式の戦闘と特殊兵器戦が選べます。特殊兵器は開幕早々あっという間にやられるほどの強敵でした。


この手のゲームは人によって好みのキー配置があると思いますが、キーコンフィグも完備していました。

 

身体は闘争を求める・・・

www.pixiv.net

 

 

 

 

 

B-01b SAVATORA

f:id:Raspberly:20191117222653j:plain

パズルゲーム「mosaiCrashにゃんこ」を体験させていただきました。
上下左右のパネルを伝って一筆書きのように消していくゲームです。
選べるパネルがランダムで決まるため、考えなしでやると積むことがありますが、
手を巻き戻す機能があるためある程度リカバリーができます。

 

モードは3種類あり、少しずつ難しくなるステップアップと、
続くかぎりパネルを消し続けるエンドレス、そしてスタンダードなオリジナル
最初はオリジナルモードの開発から始めたが、難しすぎたため他のモードに派生していったとのこと。
現在はAndroid版のみリリースされています。

play.google.com

 

 

 

 

 

A-04ab ミライノ制作所

f:id:Raspberly:20191117223410j:plain

パズルゲーム「ぐりぐりヨーロッパ」を体験させていただきました。
ぐりぐり都道府県でもお馴染みミライノ制作所さんの新作です。
都道府県の時と同じ要領で国をぐりぐりしていきます。
個人的に都道府県ほど迷うことがありませんでした。

 

ちなみに写真左のレゴブロックはタイトルコールの声優さんが作られたようです。

 

 

 

 

 

D-27a 夜は行く

f:id:Raspberly:20191117223812j:plain

中二病全開のノベルゲーム「Eigi=Einhama 魔女と狼」を体験させていただきました。
こちらはまだ体験版で、かなり含みを持った終わりとなっています。
人に化けて生きる怪異「アインハマ」がテーマ。

 

 

 

 

 

C-04a 常夜灯

f:id:Raspberly:20191117224244j:plain

アドベンチャーゲーム「エイプリル ルーム」を体験させていただきました。
部屋の中にある怪しいものを見つけていくゲームです。
とりあえず部屋のあちこちをタップしていきますが・・・

 (ネタバレのため伏字)

主人公がそのまま眠るエンディングと、何者かに・・・されるエンディングを見ました。
眠るエンディングがグッドエンドとのことですが、このゲームにはまだまだ謎があるようです。

 

 

 

 

 

D-05b PHTR-CNZ

f:id:Raspberly:20191117230650j:plain

シューティングゲーム「SufferingSHOT!」を体験させていただきました。
こちらは一見3Dシューティングゲームですが、なんと2Dに視点変更することができます。
3Dモードでは高低差を合わせ、2Dモードで戦うといったことができます。

prehistoriccenozoic.com

 

 

 

 

 

D-12a Frankensteiner

f:id:Raspberly:20191117230713j:plain

アクションゲーム「ユニティちゃん スマッシュ!」を体験させていただきました。
こちらは制限時間内にできるだけ多くのポイントを集めるゲームで、
フィールド内にいる動物をハンマーでスマッシュするとポイントがもらえます。

 

 

 

 

E-11a FortyWorks

f:id:Raspberly:20191117230753j:plain

アクションゲーム「Binary」を体験させていただきました。
アクションはもちろん各種モーションがとてもスタイリッシュなアクションゲームです。

斬撃と射撃で素早く敵を撃破できるので爽快感がありました。
サイバーチックなエフェクトもかっこいい。

 

 

 

 

B-02b 石読工房

f:id:Raspberly:20191117232312j:plain

東方二次創作弾幕シューティングゲーム「東の国の秋穫祭」を体験させていただきました。
通常の東方と同じ操作感を持ちつつ、斑鳩の属性バリアシステムを採用した作品です。
自機は常にのバリアを張っていて、対応する属性の弾に当たるとミスすることなく吸収できます。
これにより一見回避が難しそうな弾幕も、青のバリアを張って赤の弾幕を集中して避けたり、
バリアを交互に切り替えて突破したりと戦略性が増しています。

 

私は難易度ノーマルを3回コンティニューしてクリアしました。

ishiyomi.main.jp

 

 

 

 

E-17a Xin Games

f:id:Raspberly:20191117232624j:plain

ランゲーム「Wonder Run」を体験させていただきました。
通常のランゲーム要素に加え、重力を変えることで壁や崖を走ることができます。

すでにリリース済の作品とのことです。

 

 

 

 

B-10b ジェッドムのハウス

f:id:Raspberly:20191117232635j:plain

RPG「右下を押しているだけでクリアできるRPG」を体験させていただきました。
ストーリーは勇者が王様に命じられ魔王を倒しにいくオーソドックスなタイプ。
やることですがそのまんまタイトル通りです。
しかしそこは人間の性、そんなこと言われたら右下以外も押したくなっちゃいますよね
戦闘などは攻撃以外にもコマンドが選べますが、これも攻撃し続けるのが最適なようです。
レベルアップをした時にHPも全回復するので回復などは使わなくてもいけるよう調整されているみたい。

(ネタバレのため伏字)
最終的に文字が失われ世界が消滅するエンディングになりましたが、違うエンディングもあるそうです。
達成と消去、二重の意味でのゲームクリア。

 

jeddom.hatenablog.com

 

 

 

 

 

B-03a GORONIX

f:id:Raspberly:20191117232651j:plain

放置系ハクスラRPGハクスラモンスターズ」を体験させていただきました。
ReRotationでお馴染みアズマゴローさんの新作です。

モンスターでパーティを作り出撃させ冒険していきます。
冒険、及び道中の戦闘は全てオートで行われ、それらは全てログとして確認できるようになっています。
2020年リリース予定とのことです。

 

 

 

 

E-26b みかんラビリンス

f:id:Raspberly:20191117232705j:plain

ブロック崩し風ゲーム「FOR YOU」を体験させていただきました。
ブロック崩しの容量で箱を動かし、箱の中にプレゼントを集め女の子にプレゼントするゲームです。
なかなか思い通りに動かすのが難しいですが、箱の近くにプレイヤーを移動させるとスローモーションになるので、
細かく狙えるよう調整されています。

 

 

 

C-06b Image Labo

f:id:Raspberly:20191117232720j:plain

ドット絵ナゾ解きADVゲーム「Recolit」を体験させていただきました。
ドット絵とノスタルジックな空気間をもった作品で、明かりがテーマになっています。
困っている人を助けると、町の中に明かりが灯っていき、行ける場所やできることが増えていきます。


体験版もあるので興味のある方はこちらからどうぞ。
所謂「雰囲気が良いゲーム」です。ヴィジュアルワークにビビっときた方はぜひぜひ。
個人的にこういうのは大好物です。

uimss.booth.pm

 

 

 

 

C-17a Game for IT

f:id:Raspberly:20191117232732j:plain

f:id:Raspberly:20191117232758j:plain

タワーディフェンスゲーム「歩いて戦え!ラクにょんズ」を体験させていただきました。
ラクにょんズ」と呼ばれるキャラクター達を使い、敵を撃退していきます。
今回体験はできませんでしたが、歩数計を使ったシステムがあり、歩けば歩くほどラクにょんズが強化されるようです。

 

 

 

 

 

C-16b ケミカルプリン

f:id:Raspberly:20191117232812j:plain

ガチャで全国の市町村を集めるゲームを体験させていただきました。
とんでもない数の市町村をガチャをひたすら引いて集め、集めた市町村は地図から確認できます。

ガチャを引くために必要なネコカン石は時間経過で増えていきます。
さらに特定の都道府県が出やすくなるブーストアイテムも用意されています。

 

 

 

 

 

 

 他の方のブログとかレポとか

www.moguragames.com

 

www.simplelove.co

automaton-media.com

 

www.pixiv.net

 

 

 

 

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

Unity2019.2までのLWRPプロジェクトをUnity2019.3以降のURPにアップグレードする方法

 

今回はUnity2019.2までに作成したLWRPプロジェクトを、
URPプロジェクトにアップグレードする方法について紹介します。

f:id:Raspberly:20191108020650p:plain

 

 

アップグレードガイド

参考にした資料です。というよりもこちらの和訳記事となります。

docs.google.com

 

 

 

LWRPからURPへ

従来のビルトインと比べ軽量高速なレンダーパイプラインとして登場したLightweightRPですが、
Unity2019.3からUniversalRPへ名称が変わりました。

blogs.unity3d.com

将来的にはUnityデフォルトのパイプラインになる予定です。

 

※本記事ではLightweightRPをLWRPUniversalRPをURPと略称させていただきます。

 

 

 

 

開発環境

移行元プロジェクト

Unity2019.2.9f1
LWRP 6.9.2

移行先プロジェクト

Unity2019.3.0b
URP 7.1.2

 

 

 

 

 

アップグレード手順

簡単な手順でアップグレードできます。
LWRPで作成されたカスタムシェーダーやエフェクトは自動的にアップグレードされますが、
カスタムシェーダー内でShader.FindまたはUsePassを使用している場合は手動で修正する必要があります。

 

 

 

更新する前に

プロジェクトでアセンブリ定義ファイル(ASMDef)を使用している場合は、
グローバルに一意のID(GUID)を使用するようにファイルを変更します。

f:id:Raspberly:20191108012005p:plain
これは、URPがASMDefs文字列名の代わりにGUIDを使用するためです。
Unityは文字列名を自動的にアップグレードしますが、
将来の校正のためにプロジェクトでGUIDを使用することが勧められています。

docs.unity3d.com

 

 

 

 

 

アップグレードプロセス

Unity EditorのPackage Managerには、LWRPバージョン7.0.0が含まれています。
このシェルパッケージを使用すると、プロジェクトをLWRP 7.0.0に更新できるため、プロジェクトは暗黙的にUniversal RP 7.0.0を使用します。

 

プロジェクトをUnity2019.3以降で開く

アップグレードプロセスを開始するには、
Unity 2019.3以降でアップグレードするプロジェクトを開きます。

f:id:Raspberly:20191108013143g:plain

 

この時、このようなメッセージが表示されることがあります。

f:id:Raspberly:20191108013707p:plain

Unity2019.3からアセットインポートパイプラインが2にバージョンアップされますが、
従来のバージョン1は非推薦となるためアップグレードしますか?というお誘いのメッセージです。


ここではYesにしておきます。
Yesにするとアセットが再インポートされるのでアセットがたくさん入っているプロジェクトですと時間がかかるかもしれません。
ちなみにProjectSettingsから、いつでもバージョン1に戻せます。

 

パッケージマネージャーからアップデート

[ウィンドウ]> [パッケージマネージャー]> [Lightweight RP]メニューに移動します。
7.0.0以上に更新をクリックします。

f:id:Raspberly:20191108014841p:plain

Unityスクリプトアップデーターがすぐに実行され、以下を含むクラスが自動的にアップグレードされます。

 ・プロジェクトの名前空間/クラスの名前変更。
・ASMDefs文字列を新しいURP標準に再マッピング。(必要なら)

アップデータが終了すると、すべてのスクリプトが正しくコンパイルされます。

 

 

シェーダー検索パスをアップグレードする

LWRPプロジェクト内で「Shader.Find」を使用してLWRPシェーダーを検索している場合、
検索パスを「Lightweight」から「Universal」に変更する必要があります。

 

※私自身シェーダーにはあまり詳しくないのでこの辺は簡単に

カスタムシェーダーのアップグレード

タグをアップグレードする

URPは独自のスクリプトタグを使用します。独自のシェーダーを作成している場合、Unityは内部エイリアスを使用するため、URPプロジェクトでLWRPの「LightMode」タグは引き続き機能します。
ただし、プロジェクトの将来に備えてこれらのタグを手動で変更する必要があります。
Lightweight2D」タグを「Universal2D」に変更します。
LightweightForward」タグを「UniversalForward」に変更します。

↓多分こんな感じ?

        Pass
        {
            //Tags{ "LightMode" = "LightweightForward" }
            Tags{ "LightMode" = "UniversalForward" }
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

シェーダー名/クラスをアップグレードする

次のシェーダー名/クラスはURP向けに変更されているため、これらを手動で変更する必要があります。
UsePass "Lightweight Render Pipeline / ..."はUsePass "Universal Render Pipeline / ..."になります。
UnityEditor.Rendering.LWRP.xxx」は「UnityEditor.Rendering.Universal.xxx」になります。

インクルードパスのアップグレード

URPは、LWRPとは異なるインクルードパスを使用します。
LWRP 7.0.0には転送インクルードが含まれているため、カスタムシェーダーが破損することはありません。
ただし、URP 7.0.0には転送インクルードが含まれていないため、アップグレード時にタグを手動で変更する必要があります。
 「#include "Packages / com.unity.render-pipelines.lightweight / xxx"」は
#include "Packages / com.unity.render-pipelines.universal / xxx"」になります。

 

 

 

 

LWRP依存関係の削除

Unity2019.3でプロジェクトを開いたときにLWRPを7.0にアップデートしましたが、
このLWRPをURPに置き換えます

URPのインストール

LWRP 7.0.0をURP 7.0.0に置き換えるには:
[ウィンドウ]> [パッケージマネージャー]メニューに移動します。
[ユニバーサルRP]をクリックしてURPをインストールし、
[パッケージマネージャー]ウィンドウの右下にある[インストール]をクリックします。

f:id:Raspberly:20191108015525p:plain

私の場合ですと最初からインストール?されていました。

 

LWRPのアンインストール

[Lightweight RP]をクリックしてLWRPをアンインストールし、[パッケージマネージャー]ウィンドウの右下にある[削除]をクリックします。

f:id:Raspberly:20191108015753p:plain
これにより、プロジェクトからLWRPパッケージが完全に削除されます。インクルードパスを変更しなかった場合は、ここで変更する必要があります。

 

 

なぜかURPもアンインストールされる

上でLWRPをアンインストールすると、なぜかインストール済みのURPもアンインストールされました。

当然シェーダーエラーでピンクになります。

f:id:Raspberly:20191108020109p:plain

そのため再度URPをインストールしましょう。

f:id:Raspberly:20191108020305p:plain


すると無事表示されました。

f:id:Raspberly:20191108020419p:plain

これでLWRPからURPへのアップグレードは完了です。



 

まとめ

アップグレードはパッケージマネージャからURPをインストールするだけ。
この時LWRPはアンインストールしましょう。
カスタムシェーダーを使っている場合は修正が発生する場合がある。

 

 

 

参考資料

light11.hatenadiary.com

raspberly.hateblo.jp

bibinbaleo.hatenablog.com

tips.hecomi.com

 

 

 

 

 間違っている箇所がありましたらコメントなどにお気軽にどうぞ!

【勉強会レポ】: Unity道場10月〜UniteTokyo2019の舞台裏〜

勉強会のレポート(メモ)です。
参加したのはこちら、「Unity道場10月〜UniteTokyo2019の舞台裏〜」
会場はユニティ・テクノロジーズ・ジャパンさんです。

meetup.unity3d.jp

ハッシュタグ : #Unity道場

f:id:Raspberly:20191029232144p:plain

 

 

動画はこちら

www.youtube.com

 

 

 

 

 

 

1. Unity道場〜過去最高のUniteはこうして作られた〜

※実際のモデリングは動画内をご覧ください。

用語の説明

まず最初に用語の説明をします。
これらはディスプレイ業界の用語です。講演内に頻出しますので最初に開設します。

什器(じゅうき)

商品 展示品をディスプレイする機材
例えば、椅子・テーブル。展示台、展示ブースなど

木工造作(もっこうぞうさく)

木材を使用したディスプレイ
造作と略すことが多いので、この講演でもこの名称を使います。
展示ブースやウインドウディスプレイなど

 


ちなみに私はエンジニアではないのでコード読めないし書けません。
そんな私でもUnityを使ってシミュレーションすることができます。
CEDECでシミュレーションしました。

造作物は現場での改変が難しい。そのため事前準備が大事

 

イベント準備でUnityが便利な理由

・原寸でスケール確認ができる
・リアルタイムで確認することができる
スケールやレイアウトの検証、仕上げイメージの確認

 

会場制作(壁・柱など)

基礎モデル制作の流れ

・会場から図面をいただく
・現地で寸法を調査(図面と実際の寸法が違うことがあるため)
・平面図の作成
モデリング(ProBuilderでは作業コストが高く正確に再現できない恐れがあるためFusion360を使用)

什器の製作(展示台)

会場ができたら什器を置いていきます。
モデルはAsset Storeを利用して、足りないものはUnityで製作。

モデリングする時は必ず原寸サイズでモデリング
見た目にこだわる必要はありません。(大きさを正しい寸法で検証することが第一目標です)

ディスプレイ業界ではmm単位で表記されます。
Unityの値1は現実世界の1000mmと一緒です。この法則を理解すると正しい寸法で作ることができます。

 

ProBuilderについてはこちらがオススメです。

learning.unity3d.jp

 

オブジェクトの配置

図面のものを全て配置。
そうすると図面では気づきにくいところに気づくことができる。
かけるべくコストを決断するきっかけにもなる。現場ではなく事前に気付けるのがよい。

 

さいごに良いことが!

フォントサイズの検証

 講演者にとっての推奨フォントサイズを事前に知ることができた

誘導サインの検証

 お客様が迷わないように誘導サインを作る必要がある
 通常のワークフローでは、現地調査とデザイン更新が終盤に行われるため(2~3回しかできなかった)
 しかしUnityなら検証し放題
 現地調査のコスト削減ができるし、自然に目に入るようなサインを検証することができた

導線の検証

 平面図だと気づきにくい点に気付くこともできた

 

まとめ

・図面で認識できなかった問題に気づけた
・リアルタイムに看板や導線を検証できた 
・運営スタッフとの情報共有に大きく役立った
 参加したイベント会社のスタッフさんにわかりやすく伝えることができた

 

 

 

 

 

 

 

 

2. Unite Tokyo 2019 基調講演のウラ側

基調講演の準備のお話をします。

learning.unity3d.jp

 

基調講演の役割

未来や今起きていること考え方を俯瞰的にお伝えするのが役割。
多くの人が入れ替わり立ち代わりでやったり、ライトやスモークの演出もあります。
デモは詳細よりも要点だけお届けする。

何度もやった結果、60~90分の間に収めると満足度が高いことがわかりました。

参加者からの声

Unity Meetupアプリを通じて参加者の皆さんから多くの声を聴けました。
即時内容を確認でき、紙と比べて本音に近い感情を出るので、読む側は心を強く持つ必要がありました。

 

全ての公演をNPSスコアで評価している
どのくらいおすすめしたいかというところ

2018年は低かった

 

今年のチャレンジ

Unite Copenhagenとほぼ同日の実行、なので内容を一部共有しました。
ゲストスピーカーも3つの会社さんからきていただいた。
大型のリアルタイムデモ。


プランニング

7月
・やりたいことをブレスト
・できそうなことをリストアップ

8月
・講演者の決定

9月
・大どんでん返しがあったりして、内容の修正がいっぱいいっぱいいっぱいいっぱいいっぱい
・社内と会場でリハーサルして実施
9月にいろいろおきた

 

スライド制作

フォーマットを各スピーカーにお伝えして作ってもらって、最後にスライドデザイナーに作ってもらう。
スライドデザイナーはブランドデザイナ(Unityのロゴ)やフォント、スライドの色合いなどを一つにイベントに見えるように調整。

 

ユニティ仮面などはスライドに含めず配信切ってから好き放題やろうという方向になりました。

 

台本制作

Google Docsで作りました。
送り指示やライティング、スライドしゃべり文などを全て書きます。

大本文の推敲

文字に書き起こすと書き文字になりがちなので、練習でそこをピックアップして直します。

なぜGoogle Docsなのか

・最後まで編集できる、オンラインで調整できる
・文字の大きさスタイルを一度に変えられる
・しゃべる内容をそのまま書ける

同時通訳チームとも事前に共有しました。
日本語と英語が交互する時は、聞き逃しを防ぐためレシーバーをつけるよう案内をしました。

 

なぜ発表者ノートをつかわないのか

文字が大きくないと読めないため
フォントなどがずれる事故が起きにくい

 

デモ機のセットアップ

デモによっては大容量なのでインストール数日かかることも。
必ずバージョン管理システムを使う必要がある。
 事故がおきてはいけない、おかしくなった時もロールバックできる。

ここまでやって前日デモキャンセルもあります。

 

PCのスペック

デモ用のPCは2台、さらにバックアップで計4台用意しました。
2台のPCでデモをするためというのもあるが、デモの間隔が近いと少し危ないため。
PCの構成は全て同じにしているため、落ちた時もすぐ続けることができる。

返しの構成

スライドの送りなどは講演者にやらせなかった
・人が多くなり電波状況が悪くなるとあぶないため
・プレゼンテーションで熱が入ってしまうため
適切なタイミングでやるため、後ろのスタッフが全て把握し制御します。
実は裏側にかなり多くのスタッフがいる

 

基調講演のポイント

・ライブだと思ってやりましょう。
・予想外のことも起きます かならずバックアッププランも用意しましょう。
・話すことやイベントは全て台本にして、信仰を全員共有しましょう。
・会場のリハーサル時間はしっかりとりましょう。(リハ中にブレーカーが落ちました)

 

 

あらためてスタッフのみなさんありがとうございました。

 

 

 

 

 

 

 

 

 

 

 

3. Unite Tokyo 2019参加者が評価した、すごい講演 TOP 10

参加者が評価した講演トップ10とその内容を大雑把に紹介します。
Unity Learning Materialsでは、49年前のUniteの動画を見れます。

f:id:Raspberly:20191030002414p:plain

突然ですがトップ3を予測してみてください。
ちなみに今回ノンゲーム系が例年の2倍くらいあります。。。

 

 

10位 2DアーティストのためのGPU入門

learning.unity3d.jp

・2D表現で覚えておいた方がいい要素をほとんどカバーしています.。
・おさらいにもなるしいくつかのアドバイスもすばらしい。

 

 

9位 VRアニメ制作ツールAniCast!!

learning.unity3d.jp

・AniCastがおもしろい。
・AniCastを作るうえでの工夫なども。
・アニメーションの修正やかめらの手振れ問題、アニメ表現のポイント。

 

 

8位 大量のアセットも怖くない!~HTTP/2による高速な通信の実装例~

learning.unity3d.jp

・HTTP2でやるとすごい早い。
・速い点、特徴、対応しているサービスなど
・Unityで使う場合のアドバイスなど
・HTTP2を使う上でのアドバイス
C# C++連携の注意点

 

 

7位 ライブエンターテイメントにおけるUnity

learning.unity3d.jp

・現実の光表演と映像の光表現の合成について
・どうやってやっているかだけでなく、どうやってUnityでやったかという話まで
・どのように分業したかなど

 

 

6位 出版社とゲーム会社はなぜすれ違う?ドラゴンボールのゲーム化で酷い目にあった…もとい勉強させて頂いた話

learning.unity3d.jp

・やばいです
・IPとゲーム会社のマネジメントの話
・出版社とゲーム開発者の苦悩について

 

 

5位 〈七つの大罪〉をゲームで!高品質グラフィックを具現化するための技法と開発最適化のご紹介

learning.unity3d.jp

・アニメに近い表現をどうやったのかという話
・ゲーム作りでどうやったのかという話

 

 

4位 Understanding C# Struct All Things

learning.unity3d.jp

・Strctの説明、挙動、メモリ管理の話
・使う上で気を付けること
・知っているとDOTSに役に立ちます

 

 

3位 Unity開発ロードマップ最新情報

learning.unity3d.jp

・Unityの新機能の紹介
・コアな部分や新しいワークフローなど
・わくわくします

 

 

2位 パーティクルエフェクトが超進化する! Visual Effect Graph の基礎と応用

learning.unity3d.jp

VFX Graphの特徴
・最初~中級、上級までのTips
・セットアップやゲームとの連携など
・外部データとの連携
・サンプルプロジェクトはもう公開されています(Learning Materialsのページ内にまとめられています)

 

 

1位 たのしいDOTS 〜初級から上級まで〜

learning.unity3d.jp

前半
・ECSの概念
・どういう作りになっているのか

後半
・Unity Physicsの問題点
・今使う上での注意点

 


今回紹介した以外にも素晴らしい講演はたくさんあります。
ぜひUnity Learning Materialsでいろんな情報を探してみてください。

learning.unity3d.jp

 

 

 

 

 

 

 

 

懇親会

f:id:Raspberly:20191029232646j:plain

 

 

懇親会で大前さんと話す機会があり、今回のUniteで食べ物にかなり力をいれた理由を伺ってみました。

 

大前さんによると勉強会やカンファレンスではもちろん講演は重要ですが、
講演会場の外(ロビーなど)での参加者同士の交流が一番大事。 
前回(Unite2018)の反省を活かして、迷路のようだった東京国際フォーラムから会場を移し、
昼食で会場外に出る手間をなくし、ずっとここにいられるよう飲食も完備。
会場の収容人数は減ったが、その分満足度を上げるために頑張りこのような形になったとのこと。

 

会場のあちこちに会場マップやタイムテーブルが貼られ、サテライト会場で入れない講演も視聴できたり、
椅子や充電スポット、wifiと大変居心地が良かったのはきちんと考えられていたからなです。
確かに一度も会場外に出てないし、出る必要も感じませんでした。

 

当時のTwitterでも食べ物がたくさんあることがネタにされていましたが、
ぜひ来年もお願いします!

 

 

 

 

 

感想

Unity内で会場レイアウトはとても面白そう。
〇〇.unity運営の方も会場の大まかなセッティングをUnity上で作れちゃうかも!?
AssetStoreにはインテリアに使えるものも多いので、ノートパソコンなどの小物やピザの配置などにどうぞ。
↓ちょっと前に「Unity勉強会」をモチーフにしたゲームを作る時に使ったアセット達

 

 

 

 

 

Uniteのオススメ講演ですが、個人的にはこちら
大量のオブジェクトを含む広いステージでも大丈夫、そうDOTSならね」がオススメ

learning.unity3d.jp

安原さんの講演と同じDOTSですが、
こちらは実際にDOTSを用いたワークフローや具体的な使い方について解説されています。

 

 

他に動画は公開されていませんが、
Unity上でセルルックCGアニメ映画「HELLO WORLD」のシーン再現にチャレンジ!
もよかったです。

learning.unity3d.jpUnite中Unity開発者ギルドでも実況スレが建っていましたがかなり好評でした。

 

 

 

 

 

他関連してそうなレポ

raspberly.hateblo.jp

raspberly.hateblo.jp

raspberly.hateblo.jp

raspberly.hateblo.jp

 

 

他の方の感想ブログ

rhythmcan.hatenablog.com

 

 

 

 

 

誤字脱字、間違っている箇所がありましたらお気軽にコメントまでお願いします。

【勉強会レポ】: .NET Conf in Tokyo 2019 (Unity Track)

勉強会のレポート(メモ)です。
参加したのはこちら、「.NET Conf in Tokyo 2019」
会場はマイクロソフトさんです。

vsuc.connpass.com

ハッシュタグは3種類あります。
共通 : #dotnetconf
.NET Track : #dotnetconfdotnet
Unity Track : #dotnetconfunity

 

f:id:Raspberly:20191027190126p:plain

 

本イベントは.NETに関する.NET TrackとUnityに関するUnity Trackの2つに分かれています。
このレポではUnity Trackをメインでお送りします。

 

 

Room B (Unity Track)

時間 タイトル 発表者
11:00-11:05 Opening .NET Conf 2019 in Tokyo Hiroyuki Mori (@hiroyuki_mori)
11:00-12:20 What’s New in .NET Core 3.0 and Visual Studio 2019 for .NET developers(サテライト会場) Steve Carroll
13:20-14:10 Clean Architecture for Unity Tetsuya Mori (@monry)
14:20-15:10 MagicOnion〜C#でゲームサーバを開発しよう〜 torisoup (@toRisouP)
15:30-16:20 Riderはいいぞ! Ryota Murohoshi (@RyotaMurohoshi)
16:30-17:20 C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜 ユニティ・テクノロジーズ・ジャパン 安原祐二・名雪
17:20-17:30 Closing Tetsuya Mori (@monry) and torisoup (@toRisouP)

 

 

 

 

 

 

 

 

#1. Clean Architecture for Unity

f:id:Raspberly:20191027193743p:plain

対象者

Unityでもしっかりと設計したい人
Clean Architectureの導入事例を聞きたい人
マサカリを研いでいない人 

話すこと

設計に関する基本
Clean Architectureの例の図
Unityに適応してみた話

 

オススメ資料
世界一わかりやすいClean Architecture

www.nuits.jp

お仕事の宣伝

キッズスターでごっこランドという職業体験アプリを作っています

biz.kidsstar.co.jp

ここで得た知見をお話します

 

Clean Architectureとは

f:id:Raspberly:20191027190748p:plain

厳密に定義されたものは存在しません。ざっくりとした指針はあります。
みんなが思う最高のClean Architectureを作りましょう


この図を見たことはありますか?


この図にはいろいろ書かれていますがこれは一例です。
抑えるポイントを守ると自然とこの図になります。今日はこのポイントを覚えて帰ってください。

SOLID原則とDI

Clean Architectureと切っては切れないもの。
SOLID原則は保守性の高いソフトウェアを開発運用する上で基本となる考え方。
守れば保守性の高いコードが書けます。

SOLID原則とは何か

5つの原則をまとめたものです。

単一責任原則

クラスが担う責務は一つだけにしなさいというルール。
なんちゃらManagerやなんちゃらControllerなど主語がでかい名前をつけるとこれを守りづらくなります。
責務が狭い名前をつけましょう。

オープンクローズド原則

拡張に開いて修正に閉じる。
拡張しやすく、ただしそれぞれのメソッドに修正が発生しないようにすること。
インターフェースやアブストラクトを使いましょう。

リスコフの置換原則

親クラスと子クラスは置換可能であるということ。
C#の場合、newによる上書きで違反しやすい。

インターフェース分離の法則

いらないメソッド・プロパティは実装しないさせないこと。
C#は複数インターフェースを実装できるが、これらのインターフェースは分離しましょう。
ここは単一責任原則にもつながるところ。
多機能なインターフェースを実装すると破られます。

依存性逆転の原則

一番重要
抽象に依存し実装に依存させないということ。
ざっくりいうとインターフェースを引数にとり、実クラスには関心を持たせない。
DIはこれを実現するためにある。

Dependency Injection(DI)

依存性逆転を実現させるためにあるもの。
UnityではZenjectが有名。Mono Behaviourへの注入をいい感じにやってくれる。
Mono BehaviourはnewができないしPropertyをInjectionすることができない。
そこをZenjectが裏で頑張っていい感じにやってくれます。
Zenjectの場合、Installerでルールを定義できるようになっています。

 

詳しくはZenjectチョットワカルBookがおすすめ

booth.pm

UnityにおけるClean Architectureをどう実現するか

Clean Architectureは2012年にロバート・C. マーチンさんがブログで発表したもので
ざっくりとした方針だけ定義しました。
方針はこの2つ
・依存の向きは外から内のみ
・制御の流れは依存と切り分けて考える

 

依存の向きとは何か

図の矢印の向きのこと。

f:id:Raspberly:20191027214824p:plain

外から内にのみ向くようにしましょう。
ちなみに図にある名前は、あくまで目安です。そういう名前にしなさいというものではない。

制御の流れ

データの流れは内から外にだが制御の流れはどっちでも大丈夫。
内から外にいくのは割とシンプルになるが、入力はObserberパターンを使わないとしんどくなる。

 

なぜクリーンアーキテクチャをつかうのか

注意、こっからは一例です。

ごっこランドには50個以上のミニゲームが入っています。
それぞれのミニゲームは1つ1つのUnityプロジェクトであり、最後に1つのプロジェクトにマージ。
いろいろな人が開発にかかわるが、書き方を統一したかった。

導入したメリット

疎結合、テスタビリティが高い
慣れると可読性が高い

デメリット

インターフェース、クラスが多くなる。
VSやRiderなどIDEによる管理が必要
慣れるまでは可読性が低い


キッズスターではクリーンアーキテクチャ開発をするうえでブラッシュアップをし、
今はCAFUという名前で開発しています。

 

レイヤー定義とかはスライドを見てください。

まとめ

依存の向きは外から内にすること
これはキッズスターでの事例です
境界を区別することが重要

 

 

 

 

 

 

 

 

 

#2. MagicOnion〜C#でゲームサーバを開発しよう〜

f:id:Raspberly:20191027193912p:plain

今回MagicOnionについてお話します。

スライドが脅威の180枚なので詳しくはそちらをどうぞ。

MagicOnionは何なのか

ネットワーク通信のフレームワーク。サーバーはC#で書けます。
定義した共有ファイルを介することすることで通信する。
通信レイヤを気にせずサーバーを呼び出せるのが特徴

 

MagicOnionの機能

実装パターンは2つ

Service

シンプルな単発通信
1リクエストに1レスポンス

SreamingHub

リアルタイム通信向け
コネクションを張ったまま維持し自由にメッセージを送信できる

Filter

通信の前後に処理を追加する機能
かなり用途があります。

環境構築

環境構築は大変

ライブラリの追加

クライアント(unity)に各ライブラリを手動で導入。
PlayerSettingも設定が必要。

(ついでにUniRxとUniTaskも便利なのでオススメ)

コードの共有

おすすめの方法はサーバー側のスクリプトにUnity/Assets以下を参照するよう記述。
プロジェクト構成も見直しましょう。Git管理する時は全部まとめてやる。

このやり方なら設定が楽で環境に依存しない。
ただし、リポジトリが1つなるので開発フローの整理が難しくなる。

これらのデメリットをなくすには、
サーバーとゲーム本体でリポジトリとして分けて接続部分は生成したunitypackageをインポートする。

コードジェネレート

MagicOnionではコードジェネレートが2回必要。
ジェネレータはそれぞれgithubから持ってきましょう。
ボタン一発でジェネレートできるエディター拡張もあるよ

環境構築まとめ

・環境構築が大変
・開発フローはよく考えよう
リポジトリをどうわけるかなどはチーム内でよく話し合いましょう

実装例の紹介

詳しい手順はスライドを見てどうぞ

実装時の注意点 おぼえておくといいテクニック

gRPCのコネクション管理をちゃんとやりましょう

C#のgRPCはunmanaged、Disposeしないとすぐリークします、忘れないようにしましょう。
マネージャを自分で作って管理するとよい。

サーバー側でやっておくといい設定

GCモードをServerに切り替えよう
・ThreadPoolのサイズを上げておこう。
・GenericHostを使おう
 これはアプリケーション開発に便利なものをまとめたもの
 MagicOnionもこの上で動かしましょう

実装の注意点のまとめ

・コネクション管理じゃ気を付けよう
・GenericHostを使おう。

デプロイ

サーバーで動かすならDockerビルド。
Kubernetesでコンテナ管理がよい。

MagicOnionのサーバー構成

2つの構成が選べます
事実上ステートフル一択

ステートフル構成

インメモリでデータを保持する実装。
リアルタイム通信に向いている、インメモリですむので外部ストレージも使わない。
Kubernetesと相性が悪い。

ステートレス構成

プロセス上に状態を持たない構成。プロセス同士がバックエンドで動く。

構成のまとめ

リアルタイム通信はステートフルがおすすめ。
ただしKubernetesがきびしい。

 

まとめ

・サーバサイドもC#でいい感じにつくれる
・クライアントとサーバをC#で統一できる
・開発フローの整備が課題
・サーバーサイドの開発知識はある程度必要

 

MagicOnionはいいぞ

 

 

 

 

 

 

 

 

 

 

 

 

#3. Riderはいいぞ!

f:id:Raspberly:20191027193826p:plain

Unityプログラマの皆様にRiderを使ってみたくなるような紹介セッションをします

 

デモタイム

Riderはコードを書く上でのわかりにくい改善ポイントを指摘してくれます。
こういう便利な機能がたくさんあります。

JetBrains

チェコにある会社です
様々な言語・プラットフォームのIDEを作っている会社です。Riderはその中の1つ。


Riderはクロスプラットフォームに対応しています。
さらにUnityのサポートが手厚い。

C#やUnityを始めた人に特におすすめ
教える側の人にもおすすめ

Riderの機能紹介

いい感じのコードに書き換えてくれるので、一部の人から赤ペン先生と呼ばれます。
それぞれ機能に名前がついています。

たくさんあるので詳しくはスライドを。

Code Inspections

・新しいC#に置き換えられるところを指摘してくれる
・エラーになっているところやなりそうなところの指摘
・到達しないコードや不必要なコードの指摘
・タイポの指摘

さらにレベルの概念があります。(エラー・警告・提案・ヒント)

・なんでよくないかも教えてくれる
・ソリューション全体や特定のディレクトリのみなど特定のスコープで探索もできる
・アセットやSDKの中のコードも分析対象になってしまうので、設定で無視するようにした方がいいです

Run Inspection by Name

特定のインスペクション項目のみ探す機能
コードの一括変換などに便利。

Qucik Fix

Code Inspectionsで指摘されたコードをサクッと修正できる機能

Code Vision

このコンポーネントどこで使われているかを見ることができる
どこのシーンのどこのプレハブで使われているか、インスペクターでどんな値が設定されているかも見れる。

Live Template

よくあるお決まりコードを作ってくれるが、同時に型や名前を同時に設定できる。
Unity用のテンプレートがたくさん用意されています。
さらに自分でテンプレートを作ることもできますし、共有できます。

Code Generation

よくあるコードやUnity標準のイベントファンクションズ(Startとか)も簡単に作れる

Perfomane Indicators

パフォーマンスチューニングをしてくれます。
明らかに非効率でやっちゃいけないところを指摘してくれる機能。
Update内でGetComponentを呼ぶなど 

UnityEditorとの連携

RiderからUnityを制御でき。RiderからDebugLogを見ることができる。
BreakPoint内で変数を見ることができる

とりあえず覚えてほしいショートカット

Show Action List

option+enterまたはalt+enter

その文脈でできることを表示してくれる。

Find Action

Ctrl+Shift+A
Riderはできることがたくさんあるが、覚えれないことがある
それを検索できる

Serach Everywhere

Shift+Shift

コードもクラスもファイルもアクションなども全て検索できる

 

 

 

 


Code Inspectionsの提案理由はGitHubに一覧があるのでぜひ見てください。

github.com

Riderのチュートリアルもあります

Riderはいいぞ

 

 

 

 

 

 

 

 

 

 

 

#4. C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜

learning.unity3d.jp

f:id:Raspberly:20191027193545p:plain

資料、動画は後日公開予定です。Burstコンパイラのお話をします。 

コンパイラの話

書かれたC#は実行されるときは機械語になります。
その中間には何があるのか、普通はILがあります。
C#などはいったんILに変換され、AOTかJITで実行します。

 

現在は、IL2CPPの登場でLIからC++に変換します(WebGLで動かすために作られた)
今ではIL2CPPが基本になっている。

Burstコンパイラでもっと早くする

C#からILになるところは同じだが、そこからBurstコンパイラIRに変換
そこかLLVM機械語に変更します

LLVMとは

様々なプログラミング言語に対応可能なコンパイラ基盤。
昔は「Low Level Virtual Machine」という略称があったが今はない。

IR(Intermediate Representation 中間表現)

LLVMが扱う中間言語
プログラミング言語、CPUアーキテクチャから独立している。
LLVM機械語にする前にIRを最適化する。

 

なぜBurstは早いのか

LLVMの最適化が効くため

すごい最適化をしてくれる。人類が考えるあらゆる最適化が含まれている。
IRには最適化前と最適化後の2種類あります。

BurstはLLVMの読み込みやUnityとの連携をしてくれる。まさに人類の英知

f:id:Raspberly:20191027193416p:plain

 

SIMD(シムド)

single instraction multiple data
ひとつの命令で複数の計算を行う仕組み。
SSE(Intel CPU) NEON(ARM UPC)など。
機械語の命令語のひとつ。

 

Burstの制約

1.C# Job Systemでしか使えない
2.クラスが使えない

ガベージコレクションを避けるためマネージドヒープを使う参照型は使えない
ただし代わりに構造体、NativeArrayが用意されています

3.例外処理ができない

try・catch・finallyが使えない、throwは使える(jobは止まる)

 

実演 波動方程式を使って波紋を出すデモ

NativeArrayはUnityエディタでの計測は信用できないので、ビルドして確認します。
結果8倍くらいはやくなる。

↓デモプロジェクト

github.com

注意点

Burstを動かす設定ですが、エディター実行時とビルド時で個別で設定する必要があります。
ビルドする時はProjectSettingから設定しましょう。
BurstInspectorも同様です。

ベクタライズは手動でやる必要があります。自動ではやってくれない。

まとめ

IL2CPPは汎用性が高かったが高速化ができなかった。
Burstは制約を設けることで高速化できた。
Burstは特にDOTSで威力を発揮します。

 

 

 

 

 

 

 

 

 

 

.NET Trackの資料

Unity Trackとは別室で行われていた.NET Trackの資料も載せておきます。

 

 

 

 

 

 

 

関連資料

CAFU

CAFU v3 完全に理解した / Updates for CAFU v3 - Speaker Deck

 

先日のRoppongi.unity #5にてUniFlowに関するLTがありました

raspberly.hateblo.jp

 

SOLID原則についておすすめの資料

www.slideshare.net

 

 

とりすーぷさん主催のMagicOnion勉強会のレポ

raspberly.hateblo.jp

 

 むろほしさんJetBrains .NET Meetup Tokyoにてされた講演資料

learning.unity3d.jp

 

 Burstコンパイラではありませんが関係のあるDOTSの資料

learning.unity3d.jp

 

 

 

 

他の方の感想ブログとか

www.nowsprinting.com

tech-blog.cloud-config.jp

 

 

 

 

 

 

いろいろ理解が足りていないため間違っている箇所がありましたら、コメントにお願いします。