Raspberlyのブログ

Raspberlyのブログ

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

【アセット紹介】Bird Flock Bundle【Unity】

今回はアセットの紹介をしていきます。
紹介するのはBird Flock Bundleです。
鳥の動きをシミュレートしコントロールするアセットです。

f:id:Raspberly:20191128142752p:plain

 

現在開催中のSpring Saleの対象アセットとなっています。
半額で購入できるチャンスです!

 

Spring Saleはこちらのバナーからどうぞ!

f:id:Raspberly:20200423232707j:plain

 

さらにさらに、購入時に以下のクーポンコードを入力することでさらに10%OFFで購入できます!

クーポンコード: SSAFF2020

詳しいやり方はこちらをどうぞ

www.asset-sale.net

 

 

 

 

 

どんなアセット?

鳥の群れをコントロールするアセットです。
個別のアセットで売られているものをがセットになっています。

個別に買うと80ドル以上しますが、このバンドルなら半額以下で買えちゃいます。
さらにこのアセットは高い頻度で50%OFFセールの対象になっています。

 

 

用語解説

最初に、このアセットを使う上で覚えておいたほうがいい用語をまとめました。

WayPoint
鳥が飛行する際に目印にする目的地を指します。ここに向かって鳥は飛びます。

LandingSpot
鳥が着地するポイントのことを指します。

Scare
LandingSpotに着地している鳥を飛び立たせることを指します。

School
群れのことを指します。

 

 

 

開発環境

Unity2019.3.9f1

Bird Flock Bundle ver2.4.2

 

この記事ではBird Flock Crowを使用します。

 

 

 

サンプルシーンの確認

f:id:Raspberly:20200127234057p:plain
アセットインポート完了時はこんな感じです。

 

CrowやPigeonなど鳥の種類ごとにフォルダが分かれています。
それぞれのScenesにサンプルシーンがあるので確認してみましょう。
鳥によってサンプルシーンの種類が違います。

f:id:Raspberly:20200128000310p:plain

 

 

「Crow Flock - Crow Model」 シーン

キャラクターモデルの確認用シーンです。
実行すると飛行アニメーションが再生されます。

f:id:Raspberly:20200312003328g:plain

 

 

「Crow Flock - Example」 シーン

鳥たちが群れを作り、ビルのようなフィールドを飛行するシーンです。
もちろんビルなど障害物を回避します。LandingSpotが用意されているので着地もします。

f:id:Raspberly:20200422203316g:plain

Sceneビューだとこんな感じ

f:id:Raspberly:20200423200634g:plain

鳥たちは群れを作り青枠(WayPoint)を目指して飛行します。
青枠は水色枠内にランダムに生成されます。鳥が近づくと再生成されます。
黄色い範囲はLandingSpotの範囲です。着地予定の鳥は黄色い線でつながって表示されます。

 

 

「Crow Flock - Free Roam」 シーン

一定範囲内を鳥たちが自由に飛び回るシーンです。
鳥はそれぞれ群れを作ることはなく、範囲内でバラバラに行動します。WayPointは生成されません

f:id:Raspberly:20200422205329g:plain

Sceneビューだとこんな感じ

f:id:Raspberly:20200423214010g:plain

 

 

「Crow Flock - Landing Example」 シーン

鳥が指定ポイントに着地できるシステムのサンプルシーンです。

f:id:Raspberly:20200420003013g:plain

 Sceneビューだとこんな感じ

f:id:Raspberly:20200423214119g:plain

基本的な設定はExampleと同じです。
WayPointとLandingSpotが存在し、着地している様子がわかりやすい。

 

 

 

サンプルシーンの操作

ExampleとLandingにはGameビューにて以下のUIが用意されています。
文字が白いので少し見づらいですが。

f:id:Raspberly:20200422222251p:plain

Landing SpotsBird Amoutはシーン内にある着地ポイントと鳥の総数を表します。

Scare Allはシーン内でLanding Spotに着地している鳥を全て飛び立たせます。

Land In ReachはLanding Spotが近くにいる鳥を探し着地させます。近くにいない場合は無視。

Land Instantは距離に関係なく瞬時に鳥が着地した状態を作ります。

Destroyはシーン内の鳥を全て消滅させます。

鳥の数は一番下のスライダーで変更できます。

 

 

主要コンポーネント

このアセットを使いこなすうえで重要なコンポーネントを紹介します。

f:id:Raspberly:20200423002234p:plain

Flock Controller

鳥の群れをコントロールするコンポーネントです。
インスペクター用のエディタースクリプトが用意されているので、
表示されているパラメーター名とスクリプト内部の変数名が一致しないことに注意。

f:id:Raspberly:20200423003145p:plain

Frame Skipping

フレーム更新の頻度をどの程度スキップするか。(60fpsでは3~4、30 fpsでは2~3)
この値が小さいほど頻繁に更新されるようになります。逆に大きいとカクカクになります。

Bird Prefab

鳥のプレハブを設定します。

 

Roaming Area

WayPointを作成する範囲を設定します。
それぞれのパラメータはx,y,z軸になっていて、この範囲内にWayPointを作成します
このパラメータが全て0の場合WayPointは作成されません
その場合FreeRoamと同じ挙動になり、下記Size of the flockで設定した範囲内で鳥たちが飛行します。

 

Size of the flock

Bird Amoutは鳥の総数。

Flock Width, Depth, heightは鳥を生成する範囲です。Roaming Areaが0の場合、この範囲内で鳥は飛行します。

Start Position Offsetは生成範囲のオフセット。

Slowly Spawn Birdsにチャックが入っていると鳥は一斉に生成されず、
1体1体遅れて生成されます。

 

 

Behaviour And Appearance

鳥プレハブのパラメーターです。
プレハブにアタッチされているFlock Childコンポーネントのパラメーターを直接変えても、
こちらのパラメーターで上書きされるので注意しましょう。

 

Birds Min Speed & Birds Max Speedは飛行時の最低速度と最高速度。

Birds Dive Depthはどれだけ急降下するか

Birds Dive Chance & Birds Soar Chanceは急降下と急上昇の頻度(0~1)。0はまったく行わず、1は常に行う

Soar Timeは急上昇を行う時間

Min Damping Turns & Max Daming Turnsは旋回速度の最低値と最大値

Birds Min Scale & Birds Max Scaleは鳥の大きさ

 

 

Disable Pitch Rotation

鳥が上昇下降をする時、体の角度を変えるかどうか。
左がFalseで、右がTrueです。左の場合上昇する際体を上に向けているのがわかります。

f:id:Raspberly:20200422200202p:plainf:id:Raspberly:20200422200221p:plain

 

Animation

鳥が再生するアニメーションの設定。
AnimationClip名とアニメーションの再生速度が設定できます。

 

Avoidance

鳥が回避行動をするかどうかの設定。
する場合は、対象のコライダーのレイヤー名やどの程度距離をとって回避するかなど。

 

 

 

Landing Spot Controller

Landing Spotをコントロールするコンポーネントです。

f:id:Raspberly:20200423220623p:plain

いろいろありますが、重要なところだけ抜粋。
詳しいパラメータの詳細はコメント文で詳細にかかれています。


重要な点として、
Landing Spotの親オブジェクトにはこのコンポーネントがアタッチされていないといけません

Flock

シーン内のFlock Controllerを入れておきます。

 

Feather PS

鳥の羽ばたきエフェクト。Feather PS プレハブを入れておくといいでしょう。
なくても動作に問題はありません。

 

 

 

 

 

 

実際に試してみる

既存のシーン内にBird Flockを導入する

今回は街のシーンに導入してみます。

f:id:Raspberly:20200423224022p:plain


AssetのPrefabsフォルダにあるFlock ControllerがアタッチされたPrefabをシーン内に配置します。
いろいろありますが、お好みで選んでしまいましょう。

f:id:Raspberly:20200423224231p:plain

配置したらRoaming Areaパラメータなどを調整して完成です。

f:id:Raspberly:20200423224536p:plain

簡単に空が賑やかになりました。

f:id:Raspberly:20200423225308g:plain

 

他にも、Colliderのみのオブジェクトを用意しAvoidanceの設定をすることで、
鳥が何かを囲んでいるといった表現を作ることができます。

f:id:Raspberly:20200423225857g:plain

この視点だとEVA量産機みたい

 

 

 

 

 

Landing Spotを作成する

空のGameObjectを作成し、LandingSpotコンポーネントをアタッチするだけ。

例えばCubeの上に着地させたい場合。
Cubeの上に空のGameObject"LandingSpot"を作成し、これにLandingSpotをアタッチ。

f:id:Raspberly:20200423222823p:plain

f:id:Raspberly:20200423223000p:plain


親のCubeにはLanding Spot Controllerをアタッチ
Flock ControllerとFeather PS(必須ではない)を紐づけておきます。

f:id:Raspberly:20200423223216p:plain

これで完成です。

f:id:Raspberly:20200423224917p:plain

またLandingSpotControllerはシーン内に複数あっても問題ありません。
キャラクターの頭の上など、動くオブジェクトであっても動作します。

f:id:Raspberly:20200423001935g:plain

 

 

 

 

 

 

ギズモが見づらい場合

シーンビューでのギズモが見づらい場合、FlockControllerのOnDrawGizmosから
ギズモの色を変更してみてもいいかもしれません。

f:id:Raspberly:20200423195515p:plain

f:id:Raspberly:20200423195357p:plain

 

他、SceneビューのSkyboxの表示を切ってしまうのも手です。

f:id:Raspberly:20200423195736p:plain

 

 

 

 

 

まとめ

・Bird Flock Bundleは鳥の群れをシミュレーションできるアセット

・プレハブをシーン内に置くだけで鳥の群れを出現させることができる

・鳥の動きや、迂回などはノーコーディングで調整できる

・ステージの背景などにぴったり

 

 

 

他のアセットの紹介記事はこちら↓

raspberly.hateblo.jp

 

 

 

 

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

【勉強会レポ】: Unity道場 Houdiniスペシャル

勉強会のレポート(メモ)です。
参加したのはこちら「Unity道場 Houdiniスペシャル」
会場はユニティ・テクノロジーズ・ジャパンさんです。

meetup.unity3d.jp

ハッシュタグ : #Unity道場

 

f:id:Raspberly:20200220004805p:plain


 

動画はこちらから

www.youtube.com

今回の道場はデモが多めなので視聴をオススメします。

 

 

今回はUnity道場 Houdiniスペシャルです。
特別ゲストとしてSideFXの多喜建一さんが登場しました。

 

 

 

 

#1 Houdini Engine for Unityを使ってみよう ~インストールからインスタンス配置まで~

 

前置き

CEDECとUniteで講演をしています

learning.unity3d.jp

learning.unity3d.jp

このデモプロジェクトはいろんなツールを使ってできていましたが
配置に関してはHoudiniで全部できるんじゃないかと思っていました
Houdiniは縮尺の調整などが簡単に行えて、配置するオブジェクトの閾値も設定できる

 

インストール

ライセンスの種類はいろいろありますが、
APPENTICE以外はHoudiniが使えます

 

ライセンスの中でHoudiniを起動でき、同じマシンであればUnityで使えます
別のマシンでやりたいときはEngineライセンスが必要

 

 

インストールは二段階に分かれています

Houdini Engine for Unityのインストール

 Houdiniをインストールする際中に、Unityで使うかというチェックボックスが出てきます
チェックを入れてもUnityやHoudiniに影響はないので常にチェックを入れることをお勧めします

Unity側でのインストール

Import Packageや.unitypackageの起動でインポートします
まずはEverGreenというサンプルシーンからさわるといいでしょう

 

 

ここでデモ

 

基本機能
Unity Meshの作り方
Instanceの生成
配置を切り替える機能
OpenWorldDemoの配置方法

などなど 動画をご覧ください

 

 

まとめ

・Houdini持ってる方はすぐに試すことができる
・木を配置するだけでも十分なツール
・これに手を加えるだけでいろいろでき生産性も上がる
・木や草などの配置を手動でやる時代ではないのでどんどん使おう

 

 

 

 

 

 

 

#2 何でも出せる万能エクスポーター VAT で Houdini の可能性が100億倍広がる……

VATは何なのか

頂点アニメーションをベイクしたテクスチャです
Houdiniをテクスチャに焼いてUnityを動かすワークフローはSideFXで用意されています


Houdiniで出力できるVATは4種類あります

Soft VAT

トポロジーが変化しないアニメーション
メッシュの構成が変化せず、メッシュの形状変形のみで表現するアニメーション

Rigid VAT

変形しない硬いアニメーションや、位置や角度が変化しながらするアニメーション
破壊アニメーションなどに使われる

Fluid VAT

流体アニメーション
Softと違いトポロジーを扱うことができる(メッシュに穴を空けたり分離したり結合したりとか)
ほとんど流体シミュレーションで使われる

Sprite VAT

点群アニメーション

 

 

これらをシェーダーグラフを使ってUnityに取り込むお話です 
今回のサンプルプロジェクトはGitHubに上げてあります

github.com


実際にVATをエクスポートしてみます
VATのエクスポーターはSideFX Labsというプラグイン集が必要です
前はGameDevToolsetという名前でした

https://www.sidefx.com/products/sidefx-labs/

 

 

ここでデモ 動画をご覧ください

 

 

 

テクスチャとシェーダーを組み合わせるだけでできるので、
アーティストの作業範囲内でいろいろなことができる
これがVATのうまみです

 

VATの使いどころ

流体、破壊、布アニメーションなど変わった表現をピンポイントで使うのに適しています
Splatoonのインク表現ようにゲーム内のあちこちで使うものならまだしも、
特定のカットシーンなどでやりたい時に便利で、コストも抑えることができる

参考資料

Mortal Kombatの血しぶきはHoudiniの流体シミュレーションでできています
最初はVATでやっていたようです。
Mortal Kombat 11: A Bloody Production Talk | Matt Battaglia | SIGGRAPH 2019 on Vimeo
※注意 リンク先の動画は暴力的表現が含まれています

 

 

FAQ

モバイルでもVAT使えますか?

可能性としては使えます
ShaderGraphはHDRPに依存している部分はほとんどない
URP用のマスターノードに差し替えればモバイルでも動きます
こちらのブランチも用意されています

github.com

注意点としてテクスチャサイズは大きくなります

テクスチャ圧縮は使えるか?

試した範囲では使えなかった
精度が落ちてカクカクしてしまう。

 

 

 

 

 

 

 

参加者の安全を優先して懇親会はありません。
会場では消毒液が設置してあったり、マスクなど衛生用品が配られました。

 

 

 

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

【Oculus Quest開発メモ】開発初期設定まとめ Oculus Integration【Unity】

今回はOculus Questの開発ネタをやっていきます。
 

UnityでOculus Integrationを利用したVR開発をする時の初期設定のまとめです。
Unityプロジェクトの作成からサンプルシーンを動かす所まで解説します。
(定期的に更新していく予定です)

最終更新 : 2021/3/20 Oculus Quest2で動作確認済み(Oculus Link込み)

最近更新が滞っており申し訳ありません。。。。

 

 

疑問点、間違いなどがありましたらお気軽にコメントまでどうぞ

f:id:Raspberly:20200218001037p:plain

これまでOculus Integrationのアップデートで初期設定が変わることが何度かあったため、
他の開発メモと独立して執筆しました。

 

Unityプロジェクトの作成

今回は以下のバージョンを使用します。

Unity 2020.3.0f1
Oculus Integration 25.0 
XR Plugin Management 4.0.1
Oculus XR Plugin 1.8.1

(Builtinプロジェクト、URPプロジェクト両方で動作確認済み)

 

Unityインストール時にAndroid Build Supportにチェックを入れます。

f:id:Raspberly:20201111004708p:plain

 

 

Unity側の初期設定

Oculus Integrationのインポート前に設定しておきます。
インポート後でもできますがアセットの再インポートが走るためかなり時間がかかります。

Target Platformの変更(Questの場合)

Build SettingsからTarget PlatformをAndroidSwitch Platformします。
この時、Texture CompressionをASTCに変えておきます。

f:id:Raspberly:20210320171649p:plain

Oculus Linkでのみ動作させる場合はAndroidに変える必要はありません。

 

XR Plugin Managementのインストール

Project Settings/XR Plugin Managementからインストール。(PackageManagerからもできます)
Plug-in ProvidersのOculusにチェックを入れます。

f:id:Raspberly:20210320134709p:plain

 

 

Oculus XR Pluginのインストール

PackageManagerからOculus XR Pluginをインストールします。

f:id:Raspberly:20210320133638p:plain

 

インストール時にエラーが出る場合

従来のOculus AndroidとXR Plug-in Managementは互換性がありません
そのため、キャッシュなどが残っていると以下のようなエラーがでます。

f:id:Raspberly:20201111005636p:plain

これはUnityを終了させ、Library/PackageCacheを削除すると解決します。

f:id:Raspberly:20201111005831p:plain

Unityを終了させてから削除しないとうまくいかないので気を付けましょう。

参考元:Unity cannot remove com.unity.xr.oculus.android package - Unity Answers

 

 

Minimum API Levelの変更

Project Settings/Player/Other SettingsのMinimum API LevelをAPL Level 23にします。

f:id:Raspberly:20201116013435p:plain

 

Graphics APIsからVulkanを削除

Project Settings/Player/Other SettingsのGraphics APIsからVulkanを削除

f:id:Raspberly:20210320164958p:plain

 

Unity側の設定は以上です。

 

 

 

Oculus Integrationのインポート

インポート

Oculus IntegrationはUnityで開発するためのツール・スクリプト・プレハブが統合されたパッケージです。
AssetStoreからOculus Integrarionをダウンロードしインポートします。

f:id:Raspberly:20210320140323p:plain

かなり大きいアセットです。
AvatarとLipSyncは必ずしも必要ではないためチェックを外してもよい。

f:id:Raspberly:20210320140424p:plain

インポート後、いろいろダイアログが出てくるのでそれに従っていきます。

f:id:Raspberly:20210320140728p:plain

最終的にUnityの再起動が促されるため従います。 再びUnityを立ち上げて完了です。
(自動で再起動しない場合があります。その時は手動でUnityを再起動しましょう)

 

以上でOculus Quest開発を行う初期設定は完了です。

 

 

サンプルシーンの確認

Oculus IntegrationのサンプルシーンはAssets/Oculus/SampleFramework/Usageにあります。

f:id:Raspberly:20210320141729p:plainPCにOculus Questをつないである状態であれば、Build And Runですぐに実機確認ができます。

f:id:Raspberly:20210320172215p:plain

 


コントローラやハンドモデルを確認できるシーン

CustomControllersシーンはコントローラのモデルを確認できるシーン

f:id:Raspberly:20210320152116g:plain

CustomHandsシーンは手のモデルが確認できるシーン

f:id:Raspberly:20210320152146g:plain

DinstanceGrabは離れた場所にあるものを掴んでなげることができるシーンです
こちらはキャラクターコントローラーもありスティックで移動することができます

f:id:Raspberly:20210320155643g:plain

 

以上となります。
Unityプロジェクトの作成からサンプルシーンを動かすところまで解説しました。

 

 

 

 

 

 

参考資料

framesynthesis.jp

qiita.com

blogs.unity3d.com

cycling.hateblo.jp

 

 

 

 

 

番外編:Oculus Linkのススメ 

サンプルシーンや開発途中の動作確認のたびに毎回ビルドするのは大変面倒です。
そこでOculus Linkを使った開発をオススメします。

Oculus Linkとは

Oculus QuestをPCに接続し、PCVR向けコンテンツをプレイできる機能です。
PCのスペックが要件を満たしていることと、データ転送と電力供給ができるUSBケーブルが必要になります。

コンポーネント 推奨スペック
プロセッサ Intel i5-4590 / AMD Ryzen 5 1500X以上
グラフィックカード 以下のGPUの表を参照
メモリ 8GB以上のRAM
オペレーティングシステム Windows 10
USBポート USBポートx1

Unityの実行方法

PCがスペックを満たしていて、対応するUSBケーブルがある場合すぐに動作させることができます。
こちらからOculusクライアントソフトウェアをダウンロードします。

www.oculus.com

インストール後はOculus Questを接続し、画面に従ってセットアップをすればPC側の準備は完了です。

 

最後にOculus Questの設定/クイックアクションに進みOculus Linkを有効にします。

f:id:Raspberly:20210320175917p:plain

ここまで問題なければホーム画面が表示されます。

f:id:Raspberly:20210320180052p:plain

この状態でUnityのプレイモードを有効にするとそのままOculus Quest側ですぐに動作確認ができます。
毎回ビルドするよりも開発イテレーションが爆速なのでオススメです。

f:id:Raspberly:20210320154733g:plain

 

 

 

番外編:AvatarGrabの復活方法 

昔のOculus Integrationには物を掴んで投げる挙動を学習するのに最適なAvatarGrabシーンが存在していました
ただし、この方法もいつまで使えるかはわかりません。


AvatarGrabについてはこちら

raspberly.hateblo.jp

開発環境

今回はこちらの環境にインポートします。

Unity2019.3.0f6
Oculus Integration 13.0

 

旧バージョンのOculus Integrationを入手

旧バージョンのOculus Integrationを入手します。
古いものはアーカイブされているので、下のリンクからダウンロードします。

Unity Integration Archive | Developer Center | Oculus

f:id:Raspberly:20200216212336p:plain

今回ダウンロードするのは1.42.0です。
ちなみに1.42.0と書かれた所をクリックするとバージョンを変更することができます。

f:id:Raspberly:20200216212517p:plain

 

インポート

先ほどダウンロードしたOculus Integration 1.42.0のUnityPackageを実行します。
まずは一番上にあるOculusのチェックを外した状態で、

f:id:Raspberly:20200216212937p:plain

Oculus/SmapleFramework/Core/AvatarGrab
Oculus/SmapleFramework/Usage/AvatarGrab.unityにチェックを入れインポートします。

f:id:Raspberly:20200216213016p:plain

これで完了です。特にエラーもなくAvatarGrabシーンを実行できると思います。

 

AvatarGrabとその活用についてはこちら

raspberly.hateblo.jp

 

 

 

 

 

 

番外編:Oculus QuestをPCにつないでも認識されなくなる(情報求)

私の環境でたまに起こる現象。
PCにOculusQuestを付属のケーブルでつないでも認識されなくなることがあります。
当然Build And Runはできないし、中のスクショを読み込むこともできません。
気がついたら治ってたりしますが・・・・

ケーブルは問題なさそうだったので、PC側かQuest側の問題っぽいのですが、
いまいち解決方法がわかりません。何か知見をお持ちの方はコメントなどで教えていただければ幸いです。

 

同じ症状の方が結構いらっしゃいまして調べるといろいろでてきました。

ch.nicovideo.jp

qiita.com

qiita.com

 

 

 

 

 

 

 

 

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

【勉強会レポ】: Event for Diverse Game Engineers #5

勉強会のレポート(メモ)です。
参加したのはこちら「Event for Diverse Game Engineers #5」
会場は株式会社gumiさんです。

edge.connpass.com

ハッシュタグ#TokyoEdge2020

 

f:id:Raspberly:20200216012126j:plain

 

前回のレポはこちら

raspberly.hateblo.jp

 

 

 

 

#1 ゲームグラフィックス周りなんもわからんから脱却しよう

 

説明や図解が豊富なのでスライドをどうぞ

 

 

 

他参考資料

raspberly.hateblo.jp

 

 

 

 

 

#2 Unicode文字列処理

長いので詳しくはスライドをどうぞ

 

文字コード

文字コードという言葉には2つの意味があります
符号点
どの文字にどの文字を割り当てるか
今どきはUnicode一択

文字符号化形式
その番号をどうやって記録するか
同じUnicodeでも複数の符号化形式がある、UTF-8UTF-16UTF-32が基本

 

Unicode以前のお話

ASCIIコード

アメリカで規格化された文字コード
今でも使われていてインターネット上の大部分がASCII
なので互換性をとらなければならない、JavaC#の場合、この変換が結構重かったりする

 

Unicodeの符号化方式

極力推薦されるのはUTF8 (SCII互換もある)
UTF16も使われてはいる

UTF-8
ASCII互換 1~4バイトの可変長符号化

 

UTF-16
2or4バイト
元々2バイト固定のところに無理やりねじ込んだもの
普段よく使う文字は固定長、日本語中国語を扱う場合は2バイト
値としてはASCII互換だが2バイトに膨らませる処理が必要

 

 

2000代半ばに、ASCII互換の方が大事という流れになった
.NET CoreにもUTF-8化の波が来ている

docs.microsoft.com


UTF-16のほどんとの文字が固定長
後付けでマナー違反のコードはいっぱい
正規なコードポイントだけ欲しい

UTF32なら固定長ではなくCharacter同士が結合する
マイナー文字を表現するための結合文字

 

書記素(グラフェム)

人が1文字と認識する単位をグラフェムという
カーソル移動や削除はこの単位でやるべきと決まっています

 

  

世界中の文字を収めた時の話

Latin-1

西欧言語の大部分をカバー、ただしASCIIとの互換性はない
変な文字もあるし、Latin-1にない文字もある

漢字

表示できなくて困るという場面はないが、簡単ではない
漢字だけで3種類あった。どう統合すべきかは結局雰囲気で決まっている
ある程度自動判定もできなくはないが判定は曖昧

アラビア文字

ラテン文字 漢字の次に使用者が多い、聖典でも使われている

その割にすごい大変
・右から左に書く
・文字がくっつく

unicode上に左右逆に書く仕様書があるため手は出せるが、結構長いし仕様も複雑

絵文字

日本には変な文字がある
顔郵便マーク()、旧JISマーク(
Unicodeにも残ってしまった

キャリア絵文字

カラー絵文字が登場した
これもUnicodeに入ってしまった
肌の色や組み合わせを変えれる文字も登場した

国旗

キャリア絵文字の国旗はセンシティブな内容のためそのままは入れられなかった
国名コードを使う流れになった

まとめ

・符号点はUnicode一択
・符号化方式はUTF-8UTF-16が混在している
・独自規格だからと迂闊なことをやると世界標準化される

 

 

参考資料

learning.unity3d.jp

 

 

 

 

 

#3 心理的安全性って結局なんなんだろう

cedecの公募開始しています。よろしければどうぞ

CEDEC2020

 

参考資料

チームが機能するとはどういうことか|書籍|英治出版

チームでの心理的安全性

Project Oxygen

Google社内調査で成果を上げているチームとそうでないチームの違いを調査した

結果メンバーのパフォーマンスに最も影響を与えるのはマネージャーの言動だった
そこでGoogleの優れたマネージャーの要件を特定しました

rework.withgoogle.com

 

Project Aristotle

Project Oxygenの次の社内調査として、効果的なチームを可能とする条件は何かを調査

rework.withgoogle.com

重要なのは誰がチームのメンバであるかよりもチームがどのように協力しているか

推薦図書

publications.asahi.com

ワークショップタイム

ペーパータワーチャレンジを行いました。
20枚のA4用紙を使ってできるだけ高いタワーを作るというもの

f:id:Raspberly:20200216012148j:plain

心理的安全性とは

なれ合いではなく、問題や間違いを指摘しあえる世界を目指す。

揉め事がある方が生産性があがる。
対立をなくすのではなく、対立によっていろいろなアイデアを出させることが大事

次に目指すのは混沌とした世界(創造的混沌)

 

 

 

 

 

 

LT1 ゲーム開発しくじり先生~ソシャゲのおくりびと時代とインディーゲーム闇開発~

やばい

 

 

 

 

 

LT2 ディープラーニングってやつでなんとかして!~ゲームに使用できそうな近年の技術紹介~

Effekseerというエフェクト製作ツールを公開しています。
興味があればどうぞ。

 

将来使われるかもしれない技術を紹介します
機械学習の基本としてディープラーニングは魔法ではありません

デノイズ

ノイズを除去する技術
リアルタイムレイトレーシングなどに使われる

超解像

画像の解像度を向上させる技術
4Kや8Kなど上げることができる

機械学習物理

物理現象を機械学習で再現する技術
リアルタイムシミュレーションなどに

モーション生成

環境情報やキャラクターの形状からモーションを生成する技術
物理シミュレーションと組み合わせた例もあります

強化学習

環境や行動から学習を強化する技術

模倣学習

報酬を与えるのではなく、与えられたデータを真似させる技術

微分可能レンダラー

オブジェクトの情報をニューラルネットワークのパラメータとして扱える
これによって、より現実に近いパラメータを得られる

実際に取り組んでみようフレームワーク

Chainer
PyTorch
Tensoflow
JAX
使うものはどれでもいい、対して変わらない
論文や数式を読む時間が大半を占めます

学習の仕方

・サンプルを実行しよう
・既存のデータセットで学習してみよう
・海外の論文を読みましょう

ゲームに使う場合

ゲームを高速に繰り返せるようにすること
ゲームエンジンと切り離し、サーバー上で並列実行できるとよい

 

 

 

 

 

 

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

【勉強会レポ】: コドモミートアップ #2

勉強会のレポート(メモ)です。
参加したのはこちら「コドモミートアップ #2」
会場は 株式会社ミクシィ さんです。

kodomo-meetup.connpass.com

ハッシュタグ#kodomo_meetup

 

f:id:Raspberly:20200208125838j:plain

 

動画はこちら

www.youtube.com

 

 

 

イントロダクション

こどもミートアップとは
・子供向けプロダクト開発のコミュニティ作り
・知見を共有し、子供たちによい体験を提供する
の2つをコンセプトにしたミートアップです

協賛企業

会場提供はmixiさん

懇親会提供はキッズスターさんです

 

 

#1 やるやる!子どもテスト

※環境によってはスライドがちゃんと表示されていないかも

speakerdeck.com

こどもテストについての内容

こどもテストとは

開発中のアプリをこどもたちに遊んでもらうこと
キッズスターでは全てのアプリでやっています

事前準備

何回もできるものではないので準備する
・気が散らないように工夫する
・途中で中断されないようにする

実際にやるときのポイント

説明はせず観察に徹する
子供の動作、子供の感情など

師弟モデル

一度子供にプレイしてもらった後、子供から教わりながらプレイすること

子供テストを録画して共有する

Android AZスクリーンレコーダーで実現します

play.google.com


・どこを触っているかもわかる+子供の声も録音できる
・フロントカメラを使うことでどこを見ているかわかるようになります
fitbitを使うことで心拍数もトラッキングできるようになります(ドキドキしているかがわかる)

 

まとめ

・こどもテストは楽しみながらやってもらうこと
・強制すると良いフィードバックは得られない

こどもテストのいい点

自分の仕事を子供に伝えられる コミュニケーションがとれる
子供の反応が見れる(ストアのレビューだと大人の意見しか見れない)

 

 

 

 

#2 ビジネスとしての知育アプリ市場

ワオコーポレーションの紹介

www.wao-corp.com

ワオっちとは

waochi.wao.ne.jp


親子で楽しく学べる知育アプリ
対象年齢ごとにUIとかガラッと変わるので、シリーズとして出している

収益化

アプリ内課金については非消費型でやっている
子供向けの場合、成長に伴う卒業があるためサブスクリプションは利用期限に限りがある

利用率

・そもそも子供にスマホを使わせない親御さんも多い
 実際知育アプリを利用しているユーザーはうまい具合に付き合えている
・利用実態として、ユーザーの半数は今まで課金したことなく、する予定もない
そこが市場としてつらいところ

まとめ

・市場環境は厳しい
・人口が少なく、スマホを触らせたくない親も多い
・課金許容率も課金単価も少ない
・しかし課金=悪という印象も薄れてきている
・良いプロダクトも必要だが、情報発信をして業界をあげていくことも必要

 

 

 

 

 

#3 子ども向けアプリ、10年間の振り返り

ミスターシェイプのタッチカードを作りました。
その時の振り返りについて

www.mrshape.jp

開発

アプリを作りたいという想いだけで作り始めました。
フラッシュカードをベースとして作りました。
UIに関しては知見がなかったため、すでにあるアプリの操作感を取り入れました

PR

リリースをして2年はPRをしました
アプリ内キャンペーンや、リアルイベントなど
みんなにアプリを知ってもらう

収益化

教育やITではなくクリエイティブから入ったので収益化に関しては全く考えていなかった
アドオンを開始しパック販売を行いました

広がり

企業とのコラボができるようになった
キッズフロアでの展開と回りとの連携

疲弊

コストオーバーな構造のアプリなため、開発コストと収益バランスの崩れてしまった
ここで、数年ほぼ更新しない状況に
→インプレッション数 DL数が一気に落ちました

 

しかしMAUはそれほど落ちなかった、
遊んでくれいている子供たちのためにどうにかしていきたいと思った

再構築

サブスクリプション化で再構築しました
開発エンジンもCocos2dからUnityへ
既存の資産を活用して遊び方のバリエーションを増やす作戦もとりました

現在

今の時点だとサブスクリプションをやる前の収益には戻りました
しかし、落ち込んでからの回復なので、これからどう増やすかを考えている

 

 

 

 

 

 

#4 初の子供向けプロダクト開発の失敗と学び

docs.google.com

ぬっておさかなARワールドというアプリを出しました。これの知見について。

ぬっておさかなARワールド

ぬっておさかなARワールド

  • Takashi Irita
  • Entertainment
  • Free

apps.apple.com

アプリ開発の流れ

最初はARで面白いことをしたいと考えていて、リリースは考えていなかった
結果バズって、2カ月でリリースまでいきました

何がダメだったか

子供視点が不足していた

・子供に理解できないUI
・テキストが読めない
・ボタンが多すぎる
・押せないボタンがある

ボタンは直感的にわかるアイコンに変更
テキストは基本なし

単調な体験のみ

塗り絵+AR出現で終わり

エフェクトやインタラクティブ要素を追加

技術に執着していた

ARにばかり固執しアナログの重要性に気づけなかった
塗り絵要素を強化した

結論

こどもテストはやってもらった方がよい
こどもの行動や反応は想像がつかない
大人の視点ではUI/UXの想像に限界がある
テストによってこどもが夢中になる要素がわかる

まとめ

こどもに遊んでもらいながら改修したい
子供向けのUI/UXが大事
互換を使ったインタラクティブ要素は大事

 

 

 

 

 

#5 教育コンテンツ制作時に気をつけている事

docs.google.com

ミライノ製作所

www.mirai-no.com

小中学生向けの教育コンテンツ製作が中心
基本的に受注制作

 

使用ツールはAdobAnimateCC
言語はjavascript

+趣味でUnityを触り、ぐりぐり都道府県を作りリリースしました。

www.mirai-no.com


当初は子供向けではなかったが、ユーザーからのフィードバックで後から付け足しました。

制作時に気を付けていること

・押してほしいボタンは強調しよう
 ボタンを大きくしたり、色を変えたりアニメーションさせたりしょう
・文字の枠に気を付けよう
 ボタンとボタン以外が同じだとわからない
 ボタンはボタンだとわかるようにしよう
・小学生向けならば漢字に気を付ける
 学年によって習っている漢字は違う
 読めない文字はひらがなにするなり、ふりがなをふりましょう
・ナレーションやアニメは終わったら知らせよう
 どのタイミングで次に進めばいいかわからない
・ナレーションがあるなら字幕も追加しよう
 音が出せない環境で遊ぶ場合、学習がしづらい
・うまくできたら褒めよう
 クリアしただけでなく、ほめよう

まとめ

学習者の目線で考えよう
自己満足ではだめ

 

 

 

 

懇親会

 童心に帰れるよう駄菓子が用意されていました。お酒は・・・

f:id:Raspberly:20200208130157j:plain

f:id:Raspberly:20200208130213j:plain

 

 

 

感想

やぁやぁ

 

うらゆないともんりぃさんのセッションに「こどもテスト」という単語は登場していました。
言葉の通りに受け取ると「こども」にアプリを遊んでもらう事を指していると思っていましたが、
今回のふぇくさんのLTで詳細や注意点、メリットについて詳しく学ぶことができました。

他にもは、一口に子ども向けといっても、対象年齢によって作り方が大きく異なるお話も面白かった。
通常のUnity勉強会と違い技術以外の内容が多かったのもポイント。

 

 

 

他の方の感想ブログなど

blog.fakestarbaby.com

 

 

 

 

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

【イベントレポ】: Global Game Jam 2020

イベントのレポート(メモ)です。
参加したのはこちら「Global Game Jam 2020」
参加した会場はヒューマンアカデミー 秋葉原さんです。

peatix.com

ハッシュタグ : #ggj20_human

 

f:id:Raspberly:20200203204106j:plain

 

 

 

他の会場はこちら
会場ごとにハッシュタグが分かれているので、興味のある方は追ってみてください。

ggj.igda.jp

 

 

Global Game Jamとは

世界各地で同時に開催される大規模なゲームジャムです。
毎年1月末に行われ、テーマは直前に発表されます。

ggj.igda.jp

 

 

 

 

タイムスケジュール

事前にタイムスケジュールは公開されていました

1月31日(金)

18:30 開場
19:00 開会式
19:30 開発開始
22:00 企画発表(1チーム2分)

2月1日(土)

18:00 中間発表(1チーム2分)・ピアレビュー(参加者同士の試遊会)

2月2日(日)

15:00 開発終了・アップロード
17:00 作品発表会(1チーム5分)
18:00 閉会式・懇親会
20:00 懇親会終了
21:00 完全撤収

 

 

 

 

 

1日目 

基調講演&テーマ発表

要約すると健康に気をつけろという内容。
・休憩をとれ(2時間に15の休憩)
・お互いに気を配り、何が必要か伝える
・集中できる環境を作る
なぜこんなに健康を推すかというと訴えられないようにするためらしい。

 

今年のテーマは「Repair」です

 

チーム

会場側ですでにチーム分けがされていました。私は7人組のチーム3です。
内約はプランナー1、サウンド1、プログラマー5。内3人が学生。
(2日目からプログラマーが急用のため一人離脱しました)

ゲームエンジンUnity 2019.3.0f6、バージョン管理はGitホスティングサービスはGitHub
コミュニケーションツールはSlack、タスク管理はTrello

 

Trelloは付箋をつ付け貼りする感覚で使えるタスク管理ツールです。
どこまで終わっているのか、どのタスクが残っているかを可視化できます。

f:id:Raspberly:20200205103436p:plain

 

Unityのバージョンは秋葉原会場のSlack内で2019.3.0f6が推奨されていたため、
開発時に苦労することはありませんでした。

 

 

 

企画

ブレインストーミングからアイデアを出し、どれがいいか投票をして決定。

f:id:Raspberly:20200203142447j:plain

その後は具体的なメカニクス、ゴールの設定などを深堀していき仕様を固めて。

f:id:Raspberly:20200203142936j:plain

各要素ごとに役割を分担しました。私の担当はUI周りです。

f:id:Raspberly:20200203143151j:plain

 

企画は「カワイイは心のリペア」をコアに、かわいい女の子がでるゲームになりました。
内容としては女の子が服を拾ったり、おじさんに奪われたりしつつ彼氏との関係を修復することです。

↓は初期のイメージ画像

f:id:Raspberly:20200205103028p:plain

 

 

UI作成

プランナーの方から画面のラフ案をいただいて、それ通りに作っていきます。
せっかくのチーム開発なので、MVPパターンで実装しました。

qiita.com

qiita.com

 

PresenterModel(キャラクターとか)の状態に応じてView(UI)を更新するシステムです。
見よう見まねでやったのでなんか違うかも。

 

 

 

 

 

2日目

ユニティ・テクノロジーズ・ジャパンさんより、缶パン(乾パンじゃないよ)が届きました。
他にも回復アイテムがいっぱい!

f:id:Raspberly:20200203151718j:plain

f:id:Raspberly:20200203151803j:plain

去年と同じパンですが今年は一味違います!


つい最近LINEスタンプでUnityチョットデキルが発売されましたが、
そちらのシールがおまけとしてついてきます!

store.line.me

 

 

 

UI作成

ロジック面ではUniRxDOTweenを使っています。

ゲーム画面

初期ラフ案はこんな感じ。

f:id:Raspberly:20200205105129p:plain

要素を分けると以下の5つ

・タイマー
・ライフ
・スコア
・スタミナ
・アイテム

Modelに当たる部分は他の方の担当なので、ViewPresenterを作成します。

 

View

Viewには画面の更新処理を記述します。
今回のゲームはゲームパッドで操作するため、View側でイベントが発行されることはありません。

 

Presenter

PresenterはModelとViewの橋渡しをする存在です。

これでModelのパラメーター(ReactiveProperty)が変更されるとPresenterがViewを更新するようになります。
これと同じような感じで残りの4つのUIも作ってしまいます。
本当はインターフェースとかも使うらしい。

 

タイトル画面

何かボタンが押されたらシーン遷移する簡単もの。後でブラッシュアップしました。

 

チュートリアル画面

ゲーム開始時にチュートリアル画面を出します。
この時キャラクターが動かないようtimeScaleを0にしましたが、他のコルーチンも全て止まるため断念。
代わりにUniRxで状態管理を行うようにしました。

nimushiki.com

 

リザルト

初期ラフ案はこんな感じ。

f:id:Raspberly:20200205110742p:plain

しかし、ライフやスコアは常時ゲーム画面に映っているため
わざわざリザルトで出す必要性がなく廃止されました。
最終的にはボタンプッシュを促す簡素なものに。

f:id:Raspberly:20200206160548g:plain

 

スタートカウント

チュートリアル画面後にカウントダウンが始まってからゲームが開始します。
カウントダウンがだんだん早くなるようにしたのはただの遊び心

f:id:Raspberly:20200206160731g:plain

 

 

 

中間発表会&懇親会

この時点ではメインシーンのみとりあえず遊べる感じです。
懇親会ではピザとシャンメリーとリンゴジュースがでました。
飲み物にはVTuberのイラストがついています。

f:id:Raspberly:20200203152623j:plain

f:id:Raspberly:20200203152641j:plain

これらはスポンサー様の信州油屋清右衛門さんによるものです。

 

懇親会後も少し作業を進めて、タイトル→ゲームまで推移できるようにしました。

 

 

 

 

 

3日目

UIまわりは大方できたので、
最終日の作業は他オブジェクトとの連携とブラッシュアップがメインです。

f:id:Raspberly:20200203152754j:plain

 

ブラッシュアップ

残り時間がわずかのため、大幅にコードを書く作業ではなく演出強化系の要素をいくつかいれました。

アイテムエフェクト

アイテムを取ったときにエフェクトを追加しました。エフェクトはアセットストアから。

エフェクトの設定はこちらを参考にしました。

baba-s.hatenablog.com

ParticleSystemのPlay On Awakeにチェックを入れると自動的に再生されるようになり、
Stop ActionをDestroyにすることで再生終了後にParticle Systemが自動で削除されます。
Scriptで管理する必要がないため、使い捨てのエフェクトをポンと出したい時に便利。

 

画面揺らし

プレイヤーがおじさんにぶつかった時に画面を揺らします。
個人でやる場合はCamera Playなどを使いますが、今回はこちらを使用しました。

baba-s.hatenablog.com

f:id:Raspberly:20200206161121g:plain

 

タイトルロゴのアニメーション

一見ただタイトルロゴですが、Kawaiiのi二つがぴょんぴょん跳ねるアニメーションを入れました。

f:id:Raspberly:20200206154034g:plain

 

タイトル画面背景のUVスクロール

こちらは最終コミットに間に合わなかった部分。
タイトル画面の背景は直前に追加されましたが、動きがないのは寂しいのでスクールさせました。

 

 

 

 

 

完成品

完成したものがこちらになります。

globalgamejam.org

説明文:
ある日、女の子と彼氏が喧嘩。彼氏が激昂し、彼女の私物をマンションの80階から地上に撒き散らしてしまった!しかも、家を追い出されてしまう始末! 出来るだけ私物を回収して、彼氏との絆を修復させよう!アイテムが散らばるフィールドには変なおじさんがたくさんいるぞ!捕まってしまうと、服を剥ぎ取られてしまう!(エンディング分岐あり)

 

簡単に説明すると、おじさんから逃げながらフィールド内に散らばっている服を集めるというもの。
ルールとして、
・服がそのままスコアになる。
・服を集めれば集めるほど移動が遅くなる。
・おじさんにぶつかると服が奪われる
・奪われる服がなければライフが減る
・おじさんはスコアに応じて増える
・ライフが無くなるか時間経過でゲーム終了

 

 

一連のプレイはこちら(ブログに載せるため、フレーム数を削減しています)

f:id:Raspberly:20200206162411g:plain

 ゲームジャムでは世界観やストーリーを作りこむ余裕がなかったりしますが、
なんとエンディングとエンディングソングが3種類あるという充実っぷり。

・一定スコア以上でクリア → ハッピーエンド
・一定スコア未満でクリア → バッドエンド
・ライフが0になりゲームオーバー → おじさんエンド

 

そのうちUnity Roomにアップロードされるかも。されました。

unityroom.com

 

 

 

 

 

発表会&懇親会

終了後は発表を行い懇親会へ。 

f:id:Raspberly:20200206140416j:plain

f:id:Raspberly:20200206140408j:plain

 懇親会のスポンサー様はオルトプラスさんゲームクリエイターズギルドさんです。

 

 

 

 

体験会

懇親会後はゲームの体験会が開かれました。

Za Janku Mairu

Za Janku Mairu | Global Game Jam

壊れた車でより遠くを目指すゲームです。おかしい挙動を如何に活かすかがポイント。
タイヤやエンジンなど複数のパーツを組み合わせることができる。
ほとんどの場合ひっくり返って動けなくなりますが、稀に高速飛行する組み合わせがあるため、

 

 

ボードゲーム

タイムスリップ系ボードゲームで、彼女に告白をし成功させることが目的です。4人で遊べます。
先に告白を成功したプレイヤーが勝ちです。

 

プレイヤーの取れる行動は、全員を有利にするか不利にするかのどちらかなので、
どのタイミングで告白するかというのが重要そうです。

f:id:Raspberly:20200206133955j:plain

 

 

R.R.R. (Remove Reuse Repair)

R.R.R. (Remove Reuse Repair) | Global Game Jam

unityroom.com

工場でおもちゃを修理するゲームです。
おもちゃはクマのぬいぐるみロボットの三種類でそれぞれパーツが異なります。
ベルトコンベヤーからパーツが流れてくるので回収、
作れるものがあれば必要なパーツを載せて流していきます。

f:id:Raspberly:20200206133941j:plain

このゲームは最大4人までのマルチプレイができ、
お邪魔キャラとして、(プレイヤーの動きを止める)とロボット掃除機床のパーツを回収)がいます。

 

こちらのチームにはとりすーぷさんが在籍しており、開発は設計から行っています。
その時の知見はQiitaでまとめられているのでこちらもぜひぜひ。

qiita.com

qiita.comqiita.com

 

 

Planet Pocket

Planet Pocket | Global Game Jam

唯一のVRゲーム。惑星の修復を行います。
操作方法は銃を撃つ感覚で星にエネルギーを送り、無事送り届けられればクリア。
3回ミスするとゲームオーバーです。
宇宙のSkyBoxと星座をつなぎ合わせたようなUIテキストがとてもいい味を出しています。

 

 

Racing repairs

Racing repairs | Global Game Jam

二人対戦ができるレーシングゲームです。
車がだんだん壊れていくため、 パーツを拾って修理しながら進んでいきます。
壊れたままだと移動速度がものすっごい遅くなります。
(この状態だとバック走行の方が速いらしい)

f:id:Raspberly:20200206133917j:plain

 

 

 

 

修復先生 - Homeroom repair -

修復先生 - Homeroom repair - | Global Game Jam

生徒の関係性を修復し学級崩壊を防ぎゲームです。
席替えや、生徒の趣味嗜好を変化させてクラスの雰囲気を良くしていきます。

生徒はガリエース不良ギャルなど。
基本的に同じタイプの生徒を固めてあげればいいですが、
エースに限ってはライバル意識で反発するので離す必要があります。

趣味は同じもの同士であれば仲が良くなり、きのこ⇔たけのこ、
MacWindowsなど相反するものについては悪くなります。

 

私の場合、Mac好きのギャルを中心に回りをMac好きで囲む(Macサーの姫)戦法で無事クリアできました。
卒業式を迎えるとクリアですが、現状↓の画面で止まってしまうようです。

f:id:Raspberly:20200206133854j:plain

 

 

 

 

 

 

 

他の方の感想ブログとか

note.com

 

qiita.com

 

 

 

 

 

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

【勉強会レポ】: うらゆないと in ZIZAI

勉強会のレポート(メモ)です。
参加したのはこちら「うらゆないと in ZIZAI」
会場はZIZAIさんです。

connpass.com

ハッシュタグ : #うらゆないと

f:id:Raspberly:20200124232725j:plain

Unite Tokyo 2019の公募で落ちてしまった方が登壇するイベントとなっています。

 

 

 

 

会社紹介 ZIZAI

www.wantedly.com

いろんな事業をしています
・配信アプリIRIAM
VTuber事業
・スロパチステーション

その中で最も力を入れているのがIRIAM

最近はジザイトというカジュアル会社説明会をやっています

 

 

 

 

#1 Unity での開発基盤を大公開 〜ごっこランドをささえる技術 総集編〜 

www.slideshare.net

※詳しくはスライドをご覧ください

 

ざっくりプロジェクトの作り方をお話します。

app.kidsstar.co.jp

 

プロジェクト開発からリリースまで、基盤開発に関わる上で気にする点、
ビルドなどのハマリポイントなどについて。

これから話すことは正解ではなく一例です。

Unityの基盤開発まわりでアウトプットする人が増えてほしいという想いもあります。

ごっこランドのお話

ごっこランドとは

未就学児から小学校低学年までターゲットとした職業体験アプリ
実在企業がパビリオンとして出展しています

パビリオン

カジュアルゲームみたいな感じで、月に1,2本パビリオンをリリースしています。

常に新規タイトルがでているが、運用タイトルでもあり常にメンテナンスし続けている。
当然一番最初のコードから新しいコードまで含まれているアプリになります


各パビリオンごとにプロジェクトが独立していて
最終的にマージしていきます。

Unityのバージョンは常に最新に追従しています。
一気にバージョンアップするよりも、追いかけていた方がよい。

 

プロジェクトの初期設定

使っているソフトウェア

Riderはいいぞ。これがないと開発できない。後はフォトショとかイラレとか。
基本3Dはやっていません。アニメーションはUnity標準のものをつかっています。

ライブラリやアーキテクチャ

UniRx/UniTask/Zenject。UniFlowも使っています。
アーキテクチャはClean Architecture。

開発リポジトリ

GitHub上でテンプレートとなるプロジェクトを作っておきます。

解像度対応

モバイルでやっているので、実機の画面解像度をどうするかを決める。
これは最初にやっておかないとしんどくなる。
絶対に表示してほしい領域を決めるといい。 

ディレクトリ構成

アセットごとにフォルダ分けするといいでしょう。
AnimationsやImagesとか、Soundsなどでわけていきます。
Assembly Definitionは細かく分けすぎないようにしています。分けすぎるとしんどくなる。

これもリポジトリ作成時にやっておくといいでしょう

ポイント

とにかく、開発環境やスタイルを整えること
アセットstoreのアセットは使わない。メンテナンスコストがかかる。
作らなくていいものは作らない。

プロジェクト開発

ポイントとなるのは、仕様を決めたらほぼ変えないこと。
開発とこどもテストを高速でイテレーションし、こどもが理解してくれる形にする。

ポイント

できるかぎりはやく、高頻度にビルドを回せるようにする
すると認識のずれを解消できる

Player ビルド

重要なIL2CPPのお話
詳しいブログを書いています。

monry.hatenablog.com

IL2CPP

.NETのILをC++に変換してくれる
Dictonaryを使うとC++のファイルが肥大化する
外部からソースコードを突っ込むとリジェクトされるので注意

 

Asset Bundle

詳しくは去年のアドカレで

monry.hatenablog.com

各パビリオンごとにABでビルドしています。

Strip Engine Code

qiita.com

 

IOSはダウンロードサイズの表記をしなければならない。
今までは事前に計算していたが、今はAddressableがいい感じ。

リリース・申請

審査

AppStoreだけでなく今はgoogle playにもあります
AppStoreはreview guidlineがあるのでよく読みましょう

https://developer.apple.com/jp/app-store/review/guidelines/

子供向けはちょっと制約が厳しくなる

 

最近はstoreに反映されるまで時間がかかることがあるので注意

まとめ

基本はUnityと仲良くなりましょう
最新の公式ドキュメントを読みましょう
Unityだけにとどまらず、配信、サーバーインフラなどの知見をもっているとよい
そんな方を求めています・・・!

www.wantedly.com

 

 

 

おまけ ごっこランドを支える技術とか

monry.hatenablog.com

learning.unity3d.jp

monry.hatenablog.com

 

 

 UniFlowはRoppongi.unity #5のLT7で紹介されました。

raspberly.hateblo.jp

Clean Architectureについては.NET Conf Tokyo 2019の1つ目のセッションで紹介されました。

raspberly.hateblo.jp

 

 

 

 

 

 

 

 

 

#2 iPhoneひとつで「デジタルヒューマン」を実現する!「Emotional LipSync」のヒミツ

Wrap3の紹介がメインです

経緯

2013年

フォトグラメトリでスキャンをいろいろやっていました
Mixamoでボーンを入れて動かしていました

figmaは簡単だったが、フィギュアにボーンを入れるのは大変

2014年

人体スキャンができるようになった、実体キャプチャして躍らせていました

しかし顔が笑顔のまま、顔が変わらず怖い
口が開かないので喋らせることができない

2014 project airina

踊れるかわいい女の子の3Dモデルを作りたかった(UnityChanとかない時代)
TurboSquidでairinaという3Dモデルを購入しました

これも顔を変えられない、効率的に動かす手法もなかった
Blend Shapeもない

※Blend Shapeとは

ボーンによる変形ではなく、メッシュのパターンを作りブレンドすること
制約があり、同じメッシュ同じトポロジーである必要がある

トポロジーとは

メッシュの流れや構成
どこがどう区切られているかということ

2015~2017 暗黒自体

とくにやらなくなった
unity chanでいい気がしてきた

2018 IRIAM

IRIAMの開発に携わっていました

2Dでいいじゃん
3Dで多くのVライバーを出すには難しかった

 

 

たくさん挫折したが問題の原因は3つ

・メッシュを分離できない
・口の中をつくれない
・Blend Shapeを効率的に作れない

いろいろ探してWrap3というモデリングツールを見つけました

 

Wrap3の紹介

Wrap3とは

・メッシュ変形に特化したモデリングツール
・ラップで何かをつつむイメージ
・ノードベースで作れる
バッチ処理もできる

 

仮設 実写3Dモデルをリポトロジーできるか?

※リポトロジーとは

悪いトポロジーを変えること、きれいにすること

あっさりできました

 

ここでデモシーン

 

仮設 アニ文字を実写でできないか?

アニ文字には51種類のBlend Shapeは必要
40体分スキャンしました(左右反転合わせると51種類になる)
大変だが、がんばってやりました


しかし失敗、顔を動かすと破綻してしまう

 

原因は重複した変形してしまった
適当な変形ではだめだった

仮設 51 Sample FaceにベースメッシュをWrap

Apple 51 Sample Face

appleが用意してくれたサンプル


Warp3でベースメッシュ自体を51サンプルにしてしまおう

できました
ベースメッシュを変形させればよい

課題 口を開けると歯と舌がない

aticeノードで歯茎をまるごと配置できないか

Laticeノード

参考モデルの変更前 変更後があれば変形に応じて変形できる
ただし形状が近接しているのが条件

成功しました
51の歯茎パターンを自動生成できました
まつげや目玉にも応用可能

 

 

 

これで当初の問題を全て解決しました
・メッシュの分離
・Blend Shapeの自動化
・口の中の問題

 

 

課題 しわがほしい

・目をつぶった時、しわがあるのがおかしい
・口を膨らませた時ほうれい線があるのがおかしい

仮設 しわあり/しわなしでテクスチャブレンドすればいいのでは?

ShaderGraphを使用しました
BlendShapeの値に応じてテクスチャもブレンド


成功しました
よりリアルに表現できるようになりました

課題 トポロジーは変更したくない

3Dモデルを外注した場合、そのトポロジーを無視するには勇気がいる。
トポロジーモデラーが決め、BlendShapeは自動生成しよう。

仮設 Laticeノードでできるんじゃ

ベースメッシュをもとによせて変形させる

成功
どんなモデルもblend shapeが自動生成できるように

 

これでなにができるのか

Emotion Lipsync

3Dキャプチャと音声合成をとり入れました
通常のリップシンクと顔キャプチャでより自然な感じにできるようになりました

 


ここでデモシーン

 

今後の課題

・よりリアルにしたい

 ただIOSの限界がきている
・眼球
 ガラスっぽい特殊なシェーダーが必要
・口の中
 影の部分をもうちょっとなんとかした

・より安価に

まとめ

Blend Shapeはwrap3で自動化できました
しわ合成はShader Graphでやりました
IOSではURP

 

 

 

 

 

 

 

懇親会

f:id:Raspberly:20200124232815j:plain

f:id:Raspberly:20200124232936j:plain

 

 

 

 

告知タイム

第4回 VRM勉強会

vrm.connpass.com

まだ募集開始していませんが2月26日にやります。
場所はここZIZAIです。

 

Tokyo.blender #1

tokyo-blender.connpass.com

デザイナー向けのBlender勉強会を開催します。
実はLT参加者があまり集まっていません。
UnityでもUE4でもいいのでLTできる方はぜひ参加してみてください。

 

 

タイムライン

 

 

 

 

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