Raspberlyのブログ

Raspberlyのブログ

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

HUD Navigation Systemを試してみる3 Minimap編

前回からかなり間が空きましたが、「HUD Navigation System」の続きをしていきます。

f:id:Raspberly:20181227225541p:plain

assetstore.unity.com

 

前回はこちら!

 

その1

raspberly.hateblo.jp

その2

raspberly.hateblo.jp

 

 

 

 

今回は最後にあたるMiniMapについてやっていきます。
MIniMapはRaderとは違い、地形も映るという特徴があります。

 

 

セットアップ

まずはMiniMap用のテクスチャを用意します。
UnityエディターのWindow -> Sickscore Games -> HUD Navigation System -> Utilities -> Minimap Texture Creatorを選びます。

f:id:Raspberly:20190403223205p:plain

 

するとHierarchyビューに「HNS TextureCreator」というオブジェクトが作成され、
Inspectorビューに設定画面がでてきます。
ここでは、マップの範囲、テクスチャサイズ、背景を設定することができます。

f:id:Raspberly:20190403223900p:plain

f:id:Raspberly:20190403224617p:plain


Create Textureを押すと、マップテクスチャとマッププロファイルが作成されます。
このマッププロファイルはMiniMap機能を使うのに必須です。

f:id:Raspberly:20190403224840p:plain

 

 

 

マップの表示

後は他のHUDと同じように HUD Navigation Systemに設定してあげます。
Minimap Featureにチェックを入れ、Minimap Settingsで先ほど作ったProfileにチェックを入れます。

f:id:Raspberly:20190403225543p:plain



 

 

Minimap Mode

Minimapには表示Modeが2種類用意されています。

f:id:Raspberly:20190403233457p:plain



Rotate Player

マップは動かず、プレイヤーアイコンが動く設定。

f:id:Raspberly:20190403232448g:plain

 

Rotate Minimap

プレイヤーアイコンは動かず、マップが動く設定。

f:id:Raspberly:20190403232854g:plain

 

 

Rotate Minimapの時はHUD Navigation SystemのNavigation ReferenceをControllerにしたほうがいいでしょう。

f:id:Raspberly:20190403233748p:plain

これがCameraになっていると表示される座標がおかしくなります。

f:id:Raspberly:20190403232807g:plain



 

 

Minimapの大きさ

Hierarchyビューにある、HUD Navigation Canvas -> Minima Panelで、
MinimapやMinimap MaskのRectTransformで位置や大きさを自由に変えることができます。

f:id:Raspberly:20190403234420p:plain




 

よくある注意点

Minimapに限りませんが、HUD Navigatin Systemコンポーネントの各Featureにチェックを入れないと、
そもそも動きませんので気を付けましょう。

f:id:Raspberly:20190403230154p:plain

 

 

 

MiniMapの注意点

目的地やルートがわかるなど大変便利なMiniMapですが、デメリットも抱えています。

ミニマップの存在がゲーム体験へと及ぼすデメリット…「ミニマップがゲームへの没入感を殺す」 | DAMONGE

 

要約すると、ミニマップの存在でプレイヤーは迷いや不自由なく移動をすることができるが、
同時に驚きや感動までなくなってしまう。この辺は自分の作るゲームと相談しましょう。

 

 

 

まとめ

全ての機能を網羅したわけではありませんが、これでHUD Navigation Systemの使い方がわかったと思います。
とても使いやすく、各種ナビゲーションを作れるためオープンワールドなどを作る方はぜひどうぞ!

 

 

参考

このAssetを使って開発したゲームを公開しています。
挙動などを見たいかたは遊んでみてください。

マスコット大逃走 v1.5f | フリーゲーム投稿サイト unityroom



 

 

勉強会レポ : あなたの知らないキーボードの世界

勉強会のレポート(メモ)です。
参加したのはこちら、「あなたの知らないキーボードの世界」。
会場はサポーターズです。

supporterzcolab.comハッシュタグ : #spzcolab

 

 

 

あなたの知らないキーボードの世界

USとJIS配列の違い

US配列の方が小指の負担が少ない
プログラムを書くときに合理的で楽


キーボードに求められるもの(個人の好み)

・押し心地
・どういう感覚があるか
・キーの大きさ
・音


機能としては
・二重入力の少なさ
・印字が消えないこと 
・安定して入力できること 長く使えること

 

 

 

入力方式

メンブレン方式

最も普及している
ペコペコした反発があり、ぐにゃりとした底打ち
中に回路シートがあり分解すると取り出せる


パンタグラフ構造

耐久性が低く、ほこりがたまりやすい。


どっちの方式と構造も安いため機能面が弱い。
一般的なキーボードはこれ。

 

 

 

高価なキーボード

一つ一つのキーに対してスイッチがある。
キーボードが重くて耐久性が高い。

 

入力方式

静電容量無接点方式

キーを押したときに電気容量の変化で管理。
接点がないため滑らかで軽い押し心地。
音は静かで、押し心地が特徴的。キーボードが重くタイプ中動かない。
RealForceなどがこれ

 

カニカル方式

ゲーミングは全てこれ。
採用しているキースイッチによって押し心地が大きくことなる。
なるべく有名なものの方がいい。

 

 

 

キースイッチ

最も有名なのがcherry製mxスイッチ。
特許が切れているのでみんな使っています。


黒軸:スイッチ感がなくストレートな押し込み
茶軸:スイッチ感がある
赤軸:黒軸を軽くしたもの
青地:茶軸に明確なスイッチ感を加えた物


キースイッチについては押してみないとわからない。
PCショップなどで実際に押して試してみた方がいいです。
他にも銀軸、白軸など独自のものがいろいろあります。

 

 

 

 

 

自作キーボード

基盤とかケースやプログラミングなどから自作できるが、
キットを買ってはんだ付けするのが一般的。
自分で基盤を考えてキットを作るのが猛者。


キースイッチとキーキャップ、ケーブルが付属していないことがほとんど、
別途に買う必要があります、全部で大体2万ほど。

かっこいいし楽しいのでやってみるといいと思います。

 

自作キーボードアドベントカレンダーなるものがあります
それを参考にしてみてね

qiita.com

 

注意点

ケーブルが必要、分離型はジャックケーブルが必須。
また4軸か3軸か確認しましょう。

 

 

 

 

なぜ自作する必要があるのか

押し心地やさわりごこちを自分で変えることができる。(鉄や金で作る、クリア型にするなど)
キーマッピングも自由に選べる、キー自体の配置も買えることができる。

 

 

要約すると

既存のキーボードの不満点を解決できる。(親指を使わない、小指を酷使しがちなど)

レイヤーを用いて自分好みの入力をすることができる

 

 

手順のまとめ

・キットを買ったら、ダイオード・LED・キースイッチをはんだづけ
・キーファームウェアを書き込み
・キーキャップをはめる

 

 

 

キーファームウェアとは

オープンソースの自作キーボードのためのファームウェア
中身はC言語です
少し環境構築が必要なので少しめんどくさいかも

 


キーマッピング(論理配列)

現在普及しているqwety配列はものすごく効率が悪い。
なんで効率が悪いか、同じ指が動くことが多い。

どう直すか、母音を左手ホームポジションにするアプローチがあります。
自作キーボードは簡単に設定することができる

ただ新しい配列になれるのは難しい。
ただできるとものすごく早くなる。
なれるまで二週間はかかるのでその間は苦行になります。

 

 

 

yushakobo.jp興味を持った方は専門店にいってみてください。
ここのいいところはキットやキャップが全部売っていて。
必要な工具は全部そろっています。
また店員さんに聞くことができます。

boothなどに売っていたきっとも勇者工房にある場合も
通販でも買えます

 

 


キーバインド設定

わざわざ自作するのはちょっと・・・という方へ


JIS配列には不満が大きい

・変換、無変換、かたかなひらがなキーなどは押しやすい位置にあるがまず使わない。
・backspace、deleteとかの島が遠い
・エンターキーで小指を酷使しがち

 

フリーソフトキーバインド設定を変えることができます
windowschange keyauto hot key
mackarabiner elements

 

auto hot key

スクリプトキーバインド設定ができる
文法はかなり簡単
コンパイルすれば実行ファイルを映すだけで単独実行可能
キーボードドライバによってはキー入力をとれないことも


change key

windowsレジストリを書き換えるソフト
ただし管理者権限で起動しないと動かないので注意しまそう
キーを無効化することもできます

 

karabiner element

書式はJSON

qiita.com

 

 


自分にあったキーボード設定を見つけましょう

勉強会レポ : 【まつもとゆきひろ氏 特別講演】20代エンジニアのためのプログラマー勉強法

勉強会のレポート(メモ)です。
参加したのはこちら、「【まつもとゆきひろ氏 特別講演】20代エンジニアのためのプログラマー勉強法 」
会場はドリコムさんです。

supporterzcolab.comハッシュタグ : #spzcolab

 

f:id:Raspberly:20190330210440j:plain

 

会場のアルコタワーは目黒川のすぐそばなので桜がきれいです。

f:id:Raspberly:20190330210614j:plain

 

 

スポンサー様

サポーターズ


ほぼ毎日勉強会開催、ハッカソンもやってます、公演会もやっています。
マスコットキャラクターもいます、Vtuberもやっています。
質疑応答は#spzcolabで呟いてください。

今日の目的

・Matzさんの顔を見ておこう
・エンジニアとしての生き方を考えよう
・何かを始めるきっかけにしましょう


ドリコム

会場提供はドリコムさんです。
アプリのインストール不要で遊べるプラットフォームを提供しています。
社内で勉強会管理ツールがあります。誰でも自由に開催できるようになっています。
社外でも積極的に貢献しています。
採用に興味のある方はぜひどうぞ。

 

 

 

 

 


プログラマー勉強法

 

高校生の頃プログラミング言語を作りたかったが、勉強法がなかった。
だが今はネットで勉強ができる環境になっている。

今日は自分の経験に基づいて話しても老害になってしまうので
勉強の必要性について話します。死なないために


エントリーシート

個人的には史上最悪の発明。
今までどんな勉強してきたかなどを書くが、人事担当の人にとっても不幸。
人気のある、人物像など全部を細かくチェックするのは無理。
なのでキラキラした見栄えのいい人を選びがち。就活サイトだけが喜ぶ

 

ブラック企業

IT企業に多いテクノロジーに罪はないが罠の多い時代です。なので蛇のように賢い戦略が必要。
自分が何をしたいのか、どういう方向性で行きたいのかが必要。
特に若い人たち、人生に大きな影響を与えるまで(基本的に大きな成果は若い時に出る)

過去に偉大な発明をした人たちは20代に多い。MatzさんがRubyを作り始めたのも27歳。
30は遅すぎるわけではないが、若いのはアドバンテージである。
体力があるし、発想も柔軟だし、大学で学んだことが鮮明である。

今日を生きればいいという考えはもったいない。若いときこと戦略が必要。
ただし、若いときは社会的地位がまだない、なので誰かに使われることが多い。

人間にも似た性質がある(アルファシンドローム)

身体を壊しても、上司や会社は責任を取ってくれない。なので自分の身は自分で守りましょう。

それを学ぶのが勉強です。

 

学生の勉強と社会人の勉強は性質が違う。今回は社会人のための勉強について話します。
これはある種のメタファー。学ぶという言葉を抽象化して勉強という言葉に置き換えている。

 

 

 

 

 


学生の勉強との違い

満点の有無

社会にでると満点を取るという概念がない。正解があるか、ないかという違い。
100点がないということはより得意を伸ばすことができる。
1000までパフォーマンスを伸ばすこともできる
無理に苦手なことを勉強するよりも、それが得意な人と組むのも手。

学校は記憶がメイン、社会人は把握がメイン

わからないことは調べればよい。どう調べればいいのか知っていればいい。

言い方を変えると、知識とインデックス

試験と常駐戦場

学校は大体試験に、仕事だと毎日毎日頑張る必要がある。
学生だと勉強がメインと言われることが多いが、社会人だと成果を出すことがメイン。
学校の教科書の内容は変化することがない。しかし社会では定番がどんどん変化していく。

なぜ社会人は勉強するのか

人によっては「成功したい」「人間関係が築きたい」「お金が欲しい」「好きなことでやっていきたい」
勉強でこれができるかというとできるとはいえない。
しかし成長することで、成功する確率は高くなる。
勉強は成長の手段と定義することができる

 

 

 

 

 


何を学ぶか

差別化を意識しましょう(他の人との競争に勝つ)。
苦手克服はよりも好きなことを勉強するほうがいい。

学生時代の常識が通用しない

ルールの違いがある、ただ無意識に同一化してしまい学校的な学習をしてしまうのはもったいない。
社会では上限が実質ない。なので好きなことでやりましょう、意欲効率も違います。
何を学ぶか、これやっとけばOKというものはなく、差別化にならない。

インベントリ

自分は何が好きなのか、どういったことが得意なのか。自分の性質について考えてみましょう。
みなさんにもやる気がでるものがあると思います。
場合によっては複数のジャンルにまたがる人もいるかもしれない。

そして得意を伸ばしましょう。人と違っているといいし、それが生活に結び付くとなおよい。
ただしお金のことだけ考えると、判断を誤る。

何を自分のテーマに選ぶか、何が正解か、何が得意で、何を伸ばした方がいいか。
これは他人は教えてくれない、仮に教えてくれる人がいても信じてはいけない。
自分で決めなくてはいけない。妥協点も自分で決めなくてはいけない。

 

 

 

 

 


どこで学べばいいか

いつでもどこでもいい。
大事なのは環境、つまり周囲との関係。成功するということは回りからの高評価をもらうこと。
勉強するということは高評価をうけるためと考えてもいい(ポジティブフィードバック)


じゃあどこから始めたらいいのか

ポジティブループを壊す環境から逃げましょう。この環境は簡単に壊れる。
搾取する人から逃げましょう。

「win-lose」「lose-win」などいろいろあるが持続可能な取引は2種類のみ、「winwin」と「no deal」だけ。
no dealは取引をしないこと、損をすることそのものがだめ、言い方を変えれば逃げてもいい。


よい環境で学びましょう。
よい環境でもなく、どうやっても治る見込みがないのなら逃げてもいい。
逃げちゃだめだという言葉があるが、自分を追い込むのはよくない。

 

いつ学ぶか

まとまった時間はなかなか作れない。
夜や休日やっても疲れてたり・・・

そうはいっても暇だ退屈だと思うことはもったいない、暇を撲滅しましょう。
時間の使い方が大事、プライベートを犠牲にする必要はない。
仕事を早く終わらせて余った時間を使ったり、細切れの時間を使う。
睡眠時間削減はNG、脳がつらい

自分の中の優先順位をはっきりさせましょう。
ゲームやSNS、マンガなどで大事でないもの、惰性でやっているものは減らすなど。
Twitterのフォロワーを整備したり、情報収集のフォーカスを変えたり。
この辺は生活や価値観に依存します、他人には口出しできない領域です。

 

 

 

 

どう学ぶか

社会人の勉強では記憶する必要はない、ネットで調べればでる。
しかし知らないことは調べられない。

概要を把握することが大事です。好奇心を育てましょう。
知らないことを知るのは楽しいものです。

差別化

人と異なった知識、専門分野。
自分の興味のあること、得意なこと改めて考えましょう。

インベントリで大事なことは妥協と打算。
自分のやりたいことと世の中で一致しないこともある。
問題は無限に妥協しないこと、どこまで妥協できるのか、できないのか線引きすること。
妥協は悪いことではない。しばらくたったら考えも変わっているかもしれない。
他人の判断も、自分の判断も信用しない、時々振り返って、自分はどこまでできるか考えましょう。
打算がなく好きでできるならそれはいいことだが、どこまで妥協できるかを決め、
そこからたびたび振り返る。

 

 

 


アウトプット

知識を身に着けるだけならだれでもできるし調べれば出る、これだけど差別化はできない。

そこでアウトプット、だがこれのハードルは高い、
面倒だとか恥ずかしいという気持ちもある。

とにかくやってみよう
最初からすごいアクセスを集めるのは大変だがやってみよう。

何も言わないのに自分の内面を読み取ってもらうのは難しい。
伝えないと伝わらない。そういうのを繰り返す。
ブログやqiitaなど、クオリティは大事ではない。


アウトプットをすると楽になる

自分が最適化されていく。

例えばブログを書くとき、最初は数時間かかるかもしれないが。
それを繰り返すことでどんどん短縮できる。考え方、文章のまとめ方が最適化される。

そういう変化は人間の可塑性にかける。
やらない理由を見つけるのは簡単だが、苦手なことも訓練することで得意になるかもしれない。
(苦手はやらなくていいといったけど)アウトプットが苦手でもやりましょう。
自分の考えを他人にアウトプットしてもらうことはできない。


人間は置かれた環境で変化することはできる。
今はエンジニアやっていても将来かわるかもしれないし、別の世界にいくこともある。
人格もゆっくりと変化する。

 

 

 

 

成功するために必要なもの

それは知名度、人間は有名人に弱い。

知名度は価値と変換することができる。
有名になると成功することができる。まずは知られる必要がある。

アウトプットしていかないとみんな見てくれない。
知名度にはマタイの法則に当てはまる。
知名度のある人はますます知名度が上がる。
つまり成功するためには成功しなければならない。

ではどうやってこれを解釈するか
金があればコマーシャルを打てば強制的に知名度があがる、
じゃあ金がない人はどうするか。

そこでキャズム理論

キャズム理論ではこれを解決するのにはニッチに進出しなさいと言われています。
多くの人が勉強している所にいると上位に行くのは難しい。
勉強のアウトプットをするときも、ユニークなもの、埋没しない(他の多くの情報に埋もれない)ものがよい。

 

 

 

 


大事なこと

基礎を抑える

大学で学ぶような知識、コンピューターサイエンス。
この辺はあまり変わらない領域。
アルゴリズムやデータ構造など体系的に学ぶこと。


英語を学ぶ

新しいテクノロジーが出た時、英語がわかると他の人より早く知ることができる。
海外にいって自由自在に日常会話する必要はない。
英語で探し方を知っておくと、大きな時間的アドバンテージになります。


コンフォートゾーン

自分の居心地のよい場所にいると成長が滞る。
自分で決めてコンフォートゾーンから出る必要がある。
他人から言われてやるのはだめ、自分の意思で行う分にはいい。

 

 

 

 

 

質疑応答

興味のあることとやりたいことが違う場合どうするか

やりたい、やる気のあるのならいい。
やってみた結果適性がないこともあるが、どうすれば得意になるかなどを考えましょう。


アウトプットする時、間違ってアウトプットしたらどうしよう

「誠実であれ」が基本であると思います。
書いてる時に間違いであると知らなかったら別によい。
間違いだとわかったら訂正すればいい。


海外のエンジニアってデキるの?

プログラミングのスキルならあんまり変わらない。
知っている範囲が日本とはずれているので、どっちが優秀とかはない。


資格ってどうなの

資格はこの試験で〇〇点とった、といった証明しかできない。
プログラマーじゃない人に対して、自分はこの程度できますという使い方ができる。


日本のSE業界に足りないもの

合理的判断と生産性。
生産性が低いともうけがでない。
生産性があげられない理由は、「うちは今までこうしてきたから・・・」とかなど非合理的な判断のため。


回りと違うことをやるときに、どういう心構えをもつべきか

周りと同じことをやると安心するもの、しかし同じことをしているための不利益もある。
ニッチな領域に行くか、競争の激しいところにいくか、自分で判断すること。

 

 

コミュニティの問題

暴言を吐く人もいるが、OSSでお金をとっていないので、気に入らないなら使わなくても結構ですというスタンスでのりきった。


アウトプットで作ったものなどが誰にも使ってもらえなかったら

Rubyの場合は、作るのが目標だったのでそういうのはなかった。
自分の中で目標をもってもらうのがいい。

 

なんでRubyが死んでると言われるのか

どんどん新しい技術がでていき、それを追い求める集団がいる。
そういう人たちにとって、Rubyは大分前からあるもの。
つまり知的好奇心を刺激しない領域になっている。

現在でもRubyはたくさん使われている。
本当の意味でのRubyの死はないんじゃないかなと思います。
死の定義は人それぞれですが。

 

アウトプットを継続してやる方法

Twitterから初めて、敷居を下げてからやってみるといいかも。

 


考えることをあきらめないでください。
考えると道はひらける。

 

 

 

 

 

 

タイムライン

 

 

 

 

おまけ

最初のドリコムさんの紹介にあったAROWという3Dリアルマップサービスは前回のGotandaunity#11で細かく解説されているので気になる方はチェックしてみてください。
近々オープンテストもあります。

AROW オープンテスト版開発者登録

 

 

 

アウトプットをしてみたい方はこちらのスライドもどうぞ

docs.google.comこちらは去年の10月にサポーターズCoLabで開催されていた。
「エンジニアブログを一年続ける方法」という勉強会の資料です。

supporterzcolab.com

Twitterで勉強会の実況や感想を呟くことからも立派なアウトプットです。

 

 

 

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

 

勉強会レポ : Unity道場 3月〜ライティングとVFX Graph〜

勉強会のレポート(メモ)です。
参加したのはこちら、「Unity道場 3月 ~ライティングとVFX Graph~」
会場はユニティ・テクノロジーズ・ジャパンさんです。

meetup.unity3d.jpハッシュタグ : #Unity道場

 

f:id:Raspberly:20190330000222j:plain

 

動画はこちらから

www.twitch.tv

 

 

 

 

 

 #1 Unityのライティング機能のおさらい

f:id:Raspberly:20190330000252j:plain

写真めっちゃ暗い、ライティングミスった

f:id:Raspberly:20190330000357j:plain

使うことはありませんでしたが、こういうのを用意しました。
今回はライティングをどういう風に設定するのかについて話します。

 
基本的にライトはライトソースから発行しています。
当たり前ですがライトが当たったところは明るくなります。
当たってないところは暗い、光が届かなければ影になる。

これだけなら簡単だがややこしいことに光は反射します。
光は反射するものの色によって反射する光の色が変化します。

実際にはもっと複雑、反射した光によって空間は作られます。

これをリアルタイムでできればいいが高負荷。
202x年とかだとどっかの会社がレイトレシステムを作ってくれると思いますが現状はない。
なので、あらかじめテクスチャを焼きこんで使います。

 

光の種類

・環境光
・光る物質
・ライト(直接光)

 

ここでデモ
デモは動画を見てください。

 


Unityは基本的に空が青いです、なのでモデルをポン置きした時に青くなります。
ライトを設定しなくても空間の色を変えるだけでできます。
これはグラデーションもできます、スカイボックスよりも安い



Unityはライトを消しても真っ暗闇にはならない。
アンビエントライトを上書きして完全に黒にする、またはIntentityを0にする必要があります。

アンビエントライトはシーン全体に影響を与えてしまう。
部屋の中などで適応したくない時はリフレクションプローブを使いましょう。
これは部屋や廊下など閉鎖空間に対して適応しましょう、初期だと解像度が高いので注意。
馴染みやすく良い表現になります。


光る材質

エミッシブがついているとそれ自体が光ってるように見せかけれるし、実際に光らせることができます。
ただしダイナミックなオブジェクトにダイレクトにあたえることはできない、リフレクションプローブが必須。


ライト

実は奥が深い。
Baked、Mixed、Realtimeの三種類に分かれます。
結構重要な設定、いろいろな特徴があります。

Realtime

普通にライトを置くとこれになる。
範囲内のオブジェクトにダイナミック・スタティック関係なく光を与える。
ただしそのまま使うと環境光として使えない、のっぺりした見た目になってしまう。
ライトの範囲が被ると負荷が高くなるので注意しましょう。

リアルタイムGIなら間接光として使える。ただし、追加でCPUコストになる。

リアルタイムな影

ライトごとにシャドウマップが作られる。
ライトごとに見るべきところが変わっていきます。

ディレクショナルライトの場合

影を映す範囲を狭くすれば狭くするほどきれいになります。
では遠距離だときたなくなるのかというとそうではない、カスケードというものがあります。
近いもの高い解像度で描画し、遠くは雑に描画する機能です。
ただし複数回影を塗るのでおもくなることに注意。

スポットライトの場合

距離ではなく角度で決まる、狭ければ狭くなるほどきれいになる。
天井付近に置いて全方位に使うようにすると汚くなります。

ポイントライトの場合

単純に距離。
太陽変わりに使うと低品質な影になってしまいます。
リアルタイムは狭い範囲で使う分にはよい


Baked

事前にベイクした影。
ちゃんとした影になります、回りの色風乾をうけた味わい深いものにしやすいです。
ただしダイナミックな物にはつかない。
ベイクしたライトは事前計算した分、CPU負荷がとても安い。
ベイクの場合、複数のライトを使うのも問題ない。ただしメモリのコストは高い

サンプリングやレゾリューションを上げると焼くのに時間がかかる。

メモリ以外の問題

光の情報が失われる、焼いた時のテクスチャしか見なくなります。
光沢、金属的な表現を使うとしょぼくなります。
ライトプローブでダイナミックなオブジェクトにも影響を与えることができます。

 

Mixed

ベイクとリアルタイムの中間があります。それがMixed。オプションがけっこうあります。

Subtractive

ステージは全て焼き、ダイナミックな影を作る。
ベイクとリアルタイムを合わせると色が変わってしまう問題があるが、手動でどうにかできる。
完全にテクスチャに焼くので光沢は死ぬ。
それをやる方法がシャドウマスク光沢もできフワっとした影もできます。
絵的にはきれいになるオプションです。ただし、ダイナミックなものはフワっとした影には絶対できません。

ShadowMask

シャドウマスクはマスクは作るが、基本的にダイナミックなものにはつかない
影の影響を与えることはできない、リフレクションプローブで違和感を減らすことはできます。
ShadowOnlyな影専用のオブジェクトを用意するのも手です。

DistanceShadow

近いものはリアルタイム、遠距離のものはシャドウマスクのものを使うといったことができる。
影の範囲を範囲を狭くすることで奥は雑に、手前は綺麗にできる。

ShadowMaskの問題点

1オブジェクトにライトを4つしか割り当てれない。
4つ以降焼くと、テクスチャに焼かれる、どのライトが焼かれるのかは運。


BakedIndirect

間接光のみ焼く設定。
遠距離の影は焼かれないがそれを許容できるならいい設定。


どれを設定すればいいかはプロジェクトによる。
・できるだけ軽くしたいならSubtractive
・できるだけきれいにしたいならShadowMaskはいい
・広いステージではDistanceShadow。
・遠距離を見る必要がないもの(トップビューなゲームなど)はBakedIndirectがよい。

まとめ

いろいろ設定があります。
焼くのにもいくつか設定があります。
どれを使うのかは状況による。
ライトも設定ごとに確認する項目が変わります。

 

 

 

 

 

 

 

#2 Unity の新機能 Visual Effect Graph (VFX Editor) と RealSense を組み合わせると簡単に派手なことができてすごく面白いうえに勉強もはかどるという発見をしたのでその話をします

f:id:Raspberly:20190330000902j:plain

まずはいきなりデモ
動画を見てね。

 

VFX Graphは新しいエフェクトを作る仕組み。
リアルタイムで数値をいじれて視覚的にわかりやすい。
ここでお見せしたものはgithubにあります、お試しください。

GitHub - Unity-Technologies/VisualEffectGraph-Samples: Visual Effect Graph - Samples Project

もう一つの要素RealSense。リアルタイムでとれる深度センサー。

 

VFXGraphとは

正しくはVFXGraphではない、VisualEffectGraphです。検索する時はこっちで。

VisualEffectとは、ぶっちゃけるとGPUパーティクルです。
パーティクルだけに留まらずいろいろやるためにこういう名前になっています

なんかすごく複雑そうだが基本的に4つのノードだけで作られます。
無限に複雑な処理を発想次第で作ることができます。

 

これとRealSenseとのつなぎこみ

顔の形にエフェクトを出すサンプルから発想を得ました。
外から入力されたポイントマッシュをアトリビュートマップで変換して、VFXで使っています。
ここの部分をRealSenseに置き換えればよさそう、詳しくgithubを参考にしてみてね。

別にこれRealSenseeを使わなくとも、温度や気象データを使うことで視覚化することができます。


ボリューメトリックビデオをやってみました

Depthkitというボリューメトリック録画ツールがあります。
簡単な操作でunityに取り込むことができます。


まとめ

VFX GraphはGPUパーティクルのこと。
外部の要素をつなぎたかったらアトリビュートマップで変換しましょう。
ボリューメトリックビデオ楽しいよ。

 

 

 

 

 

感想

ShadowOnlyの話が出てきましたが、やり方次第では面白い演出にも使えます。

raspberly.hateblo.jp

 

VFX Graph!
シュリケンだと10万や20万もパーティクルを出したらPCが死んじゃいそうですが、こっちなら割かし無理ができそう。
青木ととさんのParticleSystemで背景を作る手法で活躍しそうです。

qiita.com私のTwitterのヘッダー画像も、これで作りましたが、パーティクルをたくさん出すのは結構負荷が大きいんですよね。

f:id:Raspberly:20190330003429j:plain

去年のUnityShader勉強会のたぐすキャットさんが使い方を詳しく解説しているので、合わせて確認してみてください。

notargs.hateblo.jp

 

 


RealSenseの顔や手に形にエフェクトを出すのはおもしろい。
DmCのボス、ボブバーバスみたいなことができそう。

www.youtube.com

 

 

 

 

 

懇親会

f:id:Raspberly:20190330003843j:plain

f:id:Raspberly:20190330003826j:plain


 

 

 

タイムライン

 

 

 

 

 

 

過去のUnity道場のまとめ

勉強会レポ : Unity道場 1月 ~LWRPとシェーダー~ - Raspberlyのブログ

勉強会レポ : Unity道場 2月 ~シェーダを書けるプログラマになろう~ - Raspberlyのブログ

 

 

 

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

 

勉強会レポ : Gotanda.unity #11

 

勉強会のレポート(メモ)です。
参加したのはこちら、「Gotanda.unity #11」
会場提供は「ドリコム」さんです。

meetup.unity3d.jpハッシュタグ : #gotandaunity

参加者の2/3くらいが初参加

f:id:Raspberly:20190328004347j:plain

 

 

 

 

スポンサー様

会場提供はドリコム
懇親会提供はキッズスター、ワンダープラネット。
いつもありがとうございます。

 

キッズスター

もんりぃさんです。表向きはととさんの上司をしています。裏では・・・
ごっこランドというアプリを作っています。ぜひ遊んでみてください。


ワンダープラネット

開(ひらき)です。
ウォンテッドリーをフォローしてください。
受付で配ったパンフレットを3秒以上見るとお寿司が食べれます。

www.wantedly.com

ドリコム

ゲームを中心に提供しています。
AROWも提供しております。

 

 

 

 

 

 


#1 位置情報を用いたモバイルゲーム開発が気軽に作れる3Dリアルマップサービス「AROW」について(概要編)

www.slideshare.net

AROWについて

没入感のあるゲーム体験を実現するためのプラットフォーム。
スマホの位置情報を利用したゲームが作れます、いままでと違うのは3Dマップを使うことができる所。

提供するもの

マップデータ、POIデータ
手軽に開発できる環境

POIデータとは

実際の地図で表示できるポイントとその情報のこと。

 

実際のマップデータからリアルタイムでモデルを生成します。
モデルを変更することもできます。なのでゲームの世界観に合わせて編集可能です。

POIデータを用いて現実世界で連携したゲームが作れます。
これはローコストでできます。

 

生成した町を歩くサンプル。
街並みは見た目だけでなく、ゲームオブジェクトとしても利用可能です。

宣伝

アニマルランランドのソースコードを公開しています。
マップデータやPOIデータがどのように使われているか、参考にしてみてください。

github.com

 

 

 

 


#2 位置情報を用いたモバイルゲーム開発が気軽に作れる3Dリアルマップサービス「AROW」について(実践編)

www.slideshare.net

AROWでできること

街並みができることが特徴です、建物生成と置き換え、道や地形など。
いままでのは予め用意したメッシュを使うのではなく、動的に生成します。

 

モデルの差し替えについて、そのまま差し替えると思った以上に乱雑になります。
一番近い道を見つけて、建物を向けるようにして違和感を緩和しています。

インテリアマッピング

スパイダーマンでおなじみの内観の表示も行います。

まとめ

現状はどうにか動く状態。
オープンテストを来月行います。事前登録してください。

docs.google.com

 

 

 

 

 

 

#3 VR展示しくじり先生

VR展示しくじり先生 / The "Sikujiri Sensei" of VR Exhibition - Speaker Deck


2
この数字なんなのかわかりますか?
これは私がVRを展示した回数です。

15/30
これは楽しく体験できなかった人数


ゲームの遊び方

ゲーム内の音を聞いてお得なセールを見つける。
その場所まで移動する。
叩いて買う。

 

だめだったところ

商品ボックスを叩かせる

背景と実際に買うボックスの違いがわかりにくい。
叩くという動作がわからない。買うという行為と叩くが直感的じゃない。
操作を単純化するために叩くという動作にしたが、結果的に直感的じゃなくなってしまった。
動画を用意したことで多少はよくなったがまだまだ。

移動方法

意外と口頭での説明を理解されなかった。
手元の操作に混乱する
コントローラで回転できるようにしたほうがよかった。

体験中に話しかける

途中でリタイアされることが多い、
体験中の人に対して横からいろいろ口出ししてしまった。

 

まとめ

装着前の説明に頼りすぎない。
説明しなくても楽しめるようなUIUXを。
体験者が思い通りに遊べなくてもそっと見守ろう。

 

 

 

 

 

 

 

 

#4 東京クロノスのサウンドの話 part.1

www.slideshare.net

Oculus GO前提の話

 

パーツ化

BGMをパーツで分けてループ感をなくす。

パーツの種類

イントロ、ループ、アウトロにわかれます。
ループはランダムに流します。これは別々のAudioClipです。

よくあるパターン

余韻を作りつなぎをスムーズにする。
MusicEngineを使っています、何小節目かなどを取得します。
余韻があるためClipを二つ同時に流します。
再生にはAudioSource.PlayScheduledを使っています。この時間帯に再生してねという設定ができます。
CPUの負荷もなだらかにできる。

少し余裕を持たせて渡しています、一小節の長さは計算する必要があります。

注意

PlayとPlaySchesuleは同時に使うと同期処理がうまくいかないので注意

レイヤー分け

物語の展開に合わせて音程を変えたりすること、
アンビエント(必ず再生するもの)とベースとリードの3つレイヤーでやりました。

 

対面した問題

AudioSouceを6個使うのは重い。
周波数の取得をリアルタイムでやるのは重い、ロード時に保持するようにします。
アウトロが長すぎる。

遅延は意外と大丈夫でした。

まとめ

ミドルウェアを使いましょう

 

 

 

 

 

 

 

 

#5 とある私事の製作覚書

docs.google.com

MacBookAirが物理的に吹っ飛びました。個人開発でもGitで管理しようね。
Unityでゲームを作る上で使えるものを紹介します。

Medibang

実質無料 クラウドサービスなので端末間で共有可能です。
ドット絵が作れます。スプライトアニメーション用に。

Magicavoxel

ボクセルを描けるもの。デザイナーさんの間で流行っています。
2Dで書きだすこともできます、タイルマップで使えます。

Fungus

会話パートの作成で使われます
きのこがかわいい

 

ここでデモ

この3つだけでゲームを作れる気がしませんか?

まとめ

ゲームを作ろうぜ

 

 

 

 

 

 


#6 Unity で HDR 出力をしたい (したかった)

docs.google.com
HDRとは

最小値と最大値の幅が広いという意味。
映像においては暗い明るいの幅が広いということ。

今回は明るい方向の話をします

単位 nit

明るさを表す単位です
SDRだと100nit前後ですが、HDRの世界では最低で1000nit以上、標準的なものだと10000以上も。

 


HDRからSDRに変換する時、本来の明るさから大分落ちてしまう。
HDRカラーでも、1より大きい値は1になってしまう。なので全部白になってします。
なので出すタイミングによって情報が消えてします。

今はHDRが標準ですがUnityはまだサポートしていない

そこでプラグインを作ってみました、HDRの映像を出すプラグインです。
ほとんどネイティブコードで書いています。

ポイント

UnityでHDRを出す時、トーンマッピングを使うと1.0以下になってしまいHDRの意味がなくなってしまうので切っておきましょう。
HDRは輝度を与えてやらないとそれっぽくならない。

用途

絵を見ながら、絵の調整をするのに使えます。HDRビデオの作成などに。

HDRの作成について、エンコードがあるかどうか確認しましょう。


今後の希望

ネイティブでのHDR出力を対応してほしい

 

 

 

 

 

 

 

 

 

#7 GGJ2019でゲームリリースしてきたから聞いてくれ!

docs.google.com

GGJでうまくいったので、その話をします。
今回のチームは三人体制。

Nichijohでやったこと

言語化、ランキングの実装、Google Playへの投稿。

UnityCloudBuild、ビルド結果をSlackで受け取れる、異変に気付けて便利。

やったこと

近所のロイヤルホストで4時間会議をしました、
目標、どれくらいできるか、などを話し合いました。

ゲームデザインで決めたこと
画面数、画面比、用語(ゲーム内の言葉)、構造、素材。

まとめ

CI環境を入れて、いつでも動作するAPKを用意する
使用で揉めたりしないよう、出せるものを出しておく、それを初日に終わらせておく。

ちなみにこの内容を技術書店に出します。け48です。

 

 

 

 

 

#8 SmartRig Bipedを使ってみよう

SmartRig Bipedを使ってみよう / Introduction to SmartRig Biped - Speaker Deck

SmartRigを使ってみた話

SmartRig Biped

最近出たアセット
キャラクターのアニメションをプロシージャルに生成するアセット
VRMでも問題なく動きました。
公式のチュートアル動画がYoutubeにあるので参考にしてみてください。


パラメータの調整の話

デフォルトだとあまりよくなかった、
コンポーネントをぽんとつけると若干中に浮いてしまう。
設定の具体的な数値はスライドをご覧ください。

 

まとめ

SmartRigを使ってみよう。
たった60ドルで自然なアニメーションが作れる。

 

 

 

 

 

感想

サウンドの話で、BGMをパーツ事に分けて扱う話がでましたが、CEDECでそんな話を聞いたことがある記憶。

www.famitsu.comピクミンでも敵が近くにいるとシームレスにBGMが切り替わりますが、やっぱりかっこいい演出ですね。

 

VR展示の失敗例の話ですが、これは多くの開発者が共感するところではないでしょうか。
他人のプレイを横から見ていると、(違う!そうじゃない!こうやって操作するんだよぉ!)って言いたくなる感じわかります。
先日のAssetBundle完全に理解した勉強会の懇親会にて、トモぞヴPさんのOculusGoアプリを体験させていただきましたが、装着前に操作説明が一切なく、完全にアプリ内のチュートリアルで完結していたのが特徴でした。
こういう形にするのが最善手かもしれません。

 

 

 

 

懇親会

 

f:id:Raspberly:20190328014520j:plain

f:id:Raspberly:20190328014612j:plain

 

 

 

 

 

タイムライン

 

 

 

 

宣伝

次のGotanda.unityは5月、会場はDeNAさんを予定しております。

Nagoya.unity #3

nagoya-unity.connpass.com名古屋でもやっています。この日みなさんは出張になると思うのでよろしくお願いします。

 

Roppongi.unity #2

roppongiunity.connpass.comGotanda.unityの妹分、うちではピザがでます。4/1から募集開始です。

 

第2回 VRM勉強会

vrm.connpass.comリンクは第1回目のものです、フォローしておいてください。

 

完全に理解した勉強会

 このままいけば5月に設計の勉強会をやります。

 

銀もく

meetup.unity3d.jp

八耐

daihachitai.connpass.com八時間のハッカソンです。絵を書いたりアプリを作ったり自由です。

 

 

前回のGotanda.unityはこちら

raspberly.hateblo.jp

GGJの話があったので、興味がある方はこちらも。

raspberly.hateblo.jp

 

 

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

勉強会レポ : Unity AssetBundle 完全に理解した

勉強会のレポート(メモ)です。
参加したのはこちら、「Unity AssetBundle 完全に理解した 」

connpass.comハッシュタグ : #AssetBundle完全に理解した

 

f:id:Raspberly:20190324215243j:plain

f:id:Raspberly:20190324215304j:plain

 

 

動画はこちらから視聴できます。

www.youtube.com

 

 

略称

AB : AssetBundle

AS : Addressable

 

 

 

タイムスケジュール

  内容 担当
13:00 受付開始 -
13:30 イントロダクション -
13:40 お前はまだ本当のAssetBundleを知らない @toru_inoue
14:20 休憩 -
14:25 ごっこランドを支える技術 〜AssetBundle 編〜 @monry
15:05 休憩 -
15:10 誰もAddressableを語らないのなら…俺が語るしかないッ @tsubaki_t1
15:50 休憩 -
16:00 LT1: AssetBundleダウンロードサイズ表示対応 @8bitdots
16:10 LT2: Unload(true)って使ってますか? @2Lt_FROST
16:20 LT3: サーバ無しでAssetBundleを使う @tty_yamada
16:30 LT4: 複数プロジェクトで同一AssetBundleを使い回す時の注意点 @kannan_xiao4
16:40 クロージング/懇親会準備 -
16:50 懇親会 -
18:00 解散 -

 

 

 

 

 

オープニング

今回のテーマはAssetBundle、
会場、懇親会、生放送、提供は全てミクシィさんです。

 

 

 

#1 お前はまだ本当のAssetBundleを知らない

www.dropbox.com

ASについては話しません。
いろいろなパーンを紹介します、しかし時間が足りないため資料の方を見てください。

今日はAB以外についても知ってもらいます。
ABを扱うということは、アプリを運用するということです。

運用を完全に理解しましょう。

更新可能要素について

実はABだけではない、Assetを更新する方法はいろいろあります。
この更新できるものをUpdatableと呼びます。

USA

UnityがシリアライズしたAssetのこと。
USAをアプリ外から入れるのはABのみ。

Bytes

Byteから生成するAsset。

Code

コードから生成するAsset。


USAを使うならAssetBundle

 

理想の運用と現実

Updatableを使ってAppを運用するわけですが、
ガッツポーズしたらユーザのリソースをアップデートしてほしい。
しかし現実はそうはいかない。ではどう実装するか。

どういう運用があるのか歴史にまとめてみた。

ワンパン期

まるごとApp内にリソースを準備

リソース分離期

起動後にリソースを取得

リソースアップデート期

起動時、アップデートを検知したら更新

任意アップデート期

ユーザが特定の画面でアップデート

常時アップデート

リソース全体を取得するのではなく、使用時に使う分だけアップデート。Updatableごと

 

要素と運用の突き合わせ

3つのUpdatableと4つの運用の組み合わせに制限はない。


AB使わなくても更新はできる。
Unityの場合、アップデートにはABが真っ先に候補でてくるが、ABは敷居が高い。
これはABが悪いのではない、運用をするための解としてABがあるだけ。

考えるべきはUpdatableと運用の理想的な組み合わせを考えること。
正直いうとABは必須ではない。

 

最高の来世

ストリーミングゲームの登場。しかし運用に対しては特に変わりはない。
変わることは、サーバとの距離がなくなるので、データダウンロードでは無く。単なる展開になる。

 

 

 

 

 

 

 

 

 

 

#2 ごっこランドを支える技術 ?AssetBundle 編?

ごっこランドをささえる技術 〜AssetBundle 編〜/AssetBundle Fully Understood - Speaker Deck

これからAB完全に理解したい人、運用方法に悩む人向けの内容。

話すこと

・ABの基礎知識について
・弊社での運用事例

 

技術書店に当選しました。け54

ABとはなにか

AssetをBundleしたもの。

Unity上でランタイムで動的読み込みすること。
いわゆるダウンロードコンテンツ

Unity3.5から使えたもの、5で大幅改善された。

メリット

ビルドされたアプリサイズを削減できる。
IOSじゃ150MB、Google playは100MBまでしかアップロードできないが、これに対応できる。

ビルドすることなくAssetを更新できる。

 

ABをとりまく構成要素

この辺の技術を組み込むことで構築できます

AssetBundle

圧縮されたバイナリファイル、圧縮アルゴリズムで固めたものそのもの。
Assetが固められた時点でAsset File Hashを持つ。
Assetの情報がちょっとでも書き換わるとこのHashも変わる。

Streamed Scene AssetBundle

Scene自体をAssetBundleとして固めた物
中身は単なるAssetBundle、名前が違う。
特殊な点としてLoadされた時点でSceneManagerからアクセスできるようになる。
依存するAssetBundleがある場合は予めLoadしておく必要がある。

Asset Bundle Name

ABの名前
インスペクタで設定。AssetBunleBuildで設定できる。
この名前はビルド時にパスとして利用される。
拡張子として.unity3dが使われる?他とぶつからないようなものがいい。

AssetBundleVariant

SD/HD、画質の切り替え、ローカライゼーション用。
Addressableがサポートしていないので非推奨。

AssetBundle Manifest

目録、ビルドする時に作られる。
各ABのハッシュ値、依存関係が含まれる、がファイルサイズは持たれない。
ハッシュ値や依存関係を問い合わせる時は、AssetBundleNameを使って問い合わせます。
ビルドすると.manifestというファイルが作られる。これはサーバとかにアップするものではない。

UnityWbRequestAssetBundle

ABをインターネットから取得する。
ローカルからも取得できる。
Webから取得するならこれを推薦。

AssetBundleCreateRequest

ABをロードする時に使うAsyncOperation。
UnityWebRequestを使うときは登場しない。

AssetBundleReauest

さっきはABそのままだったが、ロードされたABからAssetを取り出す時に使うもの。

Caching

WebRequest経由で取得したものをキャッシュしてくれる。

BuildPipelne.BuildAssetBundles

ABを使う上で必須、ABやManifestを構築するのに使う。

 

この辺を抑えておけば完全に理解したといっても過言ではない

 

AssetBndleDependency

AB内のAssetもまた、ABである状態を依存と呼ぶ。
この依存情報はManifestに記録される。
依存するABを事前に呼んでおかないと、依存元を読んだ時にMissingになる。

適切に設定しないとABコピー問題がおきる。。

 

運用事例について

ごっこランド。
詳しい構築は調べればでるので調べてください。

 

ビルドサーバ

Jenkinsおじさんが頑張っている

まとめ

ABの回りの概念を理解することでABの運用は怖くないということがわかると思います。
ビルドサーバがあると楽、ただくそ大変。

 

 

 

 

 

 

 

 

#3 誰もAddressableを語らないのなら…俺が語るしかないッ

f:id:Raspberly:20190324214111j:plain

www.slideshare.net

Addressableとはなんぞや

Assetの制御を簡単にする機能。
ちょっと前までAssetBundleManagerと呼ばれていました。

ASはどういう機能があるのか

・ABを出力する機能
・ABがどこにあるのか気にせず利用できるようにする、特定のキーワードで取得できる。
・遅延ロード、大きなシーンを読み込んだ時、遠距離のものは即座にロードする必要はないときに遅延でロードさせることができる。
・メモリ管理がやりやすくなる 
・ABのパッチをあてることができる、ABの一部だけを差し替えたり更新できるようになる。
・ローカルサーバ ネットワークの動作を確認することができる。

ASの用語

ABとは別に用語が増えている。

アドレス

 アセットと1:1になる文字烈 好きに書き換えられる

グループ

 アセットを格納するグループ、スキーマとか設定をつけることができる

スキーマ

 グループごとのビルド設定、どうビルドするのかなどの設定

プロバイダー

 どうやってロードするのかという設定

ASの想定

ASは何がしたいのか、全てのアセットをABに含みたいのだと思う。
しかし使わないものがあるとIDが無駄になるので状況によって消したい。
ちなみにすべてABにすると、ビルドデータにアセットが一切含まれない。

しかし時間がかかるので、状況に応じてモードを使いわけるのがいい。

想定2

ABはアセットを取得して組み立てるではなく、組みあがったアセットを使う。
プレハブにアドレスを設定してそれだけを取得するのではないかなと思います。

そうなると問題がでてくる、重複の問題

二つのABで同じ素材を保持するということになってしまう。
Analyzeにチェックすると、重複チェックしてくれます。


ちなみに。全て非同期でやっています。
即座に生成することはできない、最短でもLateUpdate時。


自分の状況に合わないときはカスタマイズすることができます。
プロバイダーを拡張することもできます。

 

ここでデモ

www.youtube.com

 

現状どうなのか

素直に使えるなら楽になった、ビルドインシェーダーも含まれている。
テストケースがまだ甘い、エラーを特定するにはコードを見るしかない。安定するのはもうちょっと先。

 

 

 

 

 

 

 

 

LT1. AssetBundleダウンロードサイズ表示対応

AssetBundleDownloadSize - Speaker Deck

そもそもなぜこんな話をするのか。
IOSで追加のダウンロードをさせる場合はサイズを表示しなければならなくなった。

細かい不明点はあるがABのサイズ表示をしたい。

しかしABにはサイズ取得メソッドがない、公式でない以上自分で作るしかない。
今回はYAMLを加工してどうにかするアプローチをしました。

 

 

 


LT2. Unload(true)って使ってますか?

docs.google.comみなさんはunload(ture)を使っていますか?
これはABを強制解放することができます。
結果、使っているのに解放されてMissingになったりする。
その点falseは安全。

ところでこれ誰が管理しているのかというと、unityのresoucesが管理しています。
見方を変えると、任意の単位でいくつかのAssetの解放ができる。

ライブラリはgithubで公開しています

 

 

 

 

LT3. サーバ無しでAssetBundleを使う

docs.google.com

最初に結論から、サーバを使った方がいい

なぜサーバがいいのか

・サイズを小さくできる
・リソースの差し替えをバイナリの更新無しでできる

むしろなぜローカルで使う必要があるのか

・通信しなくてもゲームをさせたい
・会社がサーバを用意している間の一時しのぎ
・ストレージ代を抑えたい

通信しなくてもプレイさせたい

・初回DL中のミニゲーム
・チュートアルまではダウンロードさせない
・完全オフラインモード

どうやってローカルでやるか、ストリーミングアセットで対応します。

まとめ

理由がなければサーバでやったほうがいい
ローカルでやる場合はプロジェクトにあった運用を

 

 

 

 

 

LT4. 複数プロジェクトで同一AssetBundleを使い回す時の注意点

20190324_複数プロジェクトで共通のAssetBundleを使う - Speaker Deck

ABを扱う際の壁
・ABのキャッシュ
・metaファイルのguid

本題、どう使いまわすのか

・キャッシュしない
 WebGLではブラウザキャッシュがかってにききます
・ABビルドを行うprojectは1つだけにする
 ちゃんと読み込めます
・自前でシングルマニフェストを生成する
 自前でjsonなどで管理

キャッシュについて

hashコンフリクトさえ起こらなければ大丈夫
hashの代わりにCachesAssetBundleとか使えry
キャッシュは自前実装すれば複数とか関係ない

guidによる参照の問題

テクスチャとかオーディオなら大丈夫、ghuidで管理されている。
問題はC#やシェーダー、これらはビルドインされていることが前提となっている。

C#スクリプトのAB対応

C#スクリプトをmetaごと複数して読み込む
・DLL化して取り込む

AB考えないならパッケージマネージャーを使った方がいい。
DLLの置き換えでMissingになる問題は力技で解決。

まとめ

GUIDによる参照関係に気を付けましょう。

 

cluster.unityが開催されます ぜひ参加してね

cluster-vr-meetup.connpass.com

 

 

 

 

 

懇親会

 お寿司とピザ!

 

 

 

f:id:Raspberly:20190324215605j:plain

f:id:Raspberly:20190324215609j:plain

 

 

 

 



これほど食欲がなくなる寿司を見たことがあるだろうか・・・?

f:id:Raspberly:20190324215615j:plain

よく懇親会のネタで、お寿司のエビは人気がないとは言われますがこれほどとは。
この時はエビ、イカ、ホタテとたまごが少々。ちなみに有志によって全てアンロードされました、

 

 

タイムライン

 

 

 

 

 

 

 

 

 

 

 

 

 

 

感想ブログ

monry.hatenablog.com

 

 

 

過去の完全に理解した勉強会

raspberly.hateblo.jp

raspberly.hateblo.jp

raspberly.hateblo.jp

raspberly.hateblo.jp

 

 

 

 

 

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

勉強会レポ : Event for Diverse Game Engineers #4

 

勉強会のレポート(メモ)です。
参加したのはこちら、「Event for Diverse Game Engineers #4 」です。

edge.connpass.comハッシュタグ : #TokyoEdge2019

 

 

 

 

 

 

 

タイムスケジュール

時間 内容
13:15 開場
13:30-13:40 挨拶とインターネットイニシアティブ様より会場説明と会社紹介
13:45-14:40 UE4のためのより良いゲーム設計を理解しよう!」
14:40-14:50 10分休憩
14:50-15:40 「基礎から学ぶ!UE4C++を用いた交えたAI開発、興味ないですか?」
15:40-15:50 10分休憩
15:50-16:25 キャリアプラン?何それおいしいの?」
16:25-16:35 10分休憩
16:35-16:50 「初海外で英語が出来なくてもノリで行く、GDC3日間の旅」
16:50-17:05 「UnityでAddComponentするだけで3DViwerを作れた話」
17:05-17:20 「できる! VRM for UE4
17:20-17:25 閉会の挨拶
17:25-17:40 会場片付け
18:00-20:00 懇親会

 

 #1「UE4のためのより良いゲーム設計を理解しよう!」

www.slideshare.net

 

まずはゲーム設計について

設計における基本

まずは何を考えて設計するのか。
「再利用性」、「汎用性」、「使いやすさ」、「依存関係の低さ」
これらを考えないとゲーム開発後半で仕様変更や追加に対応できなくなってします。

ゲームにおける前提として、パフォーマンスを考えないといけない。
パフォーマンスと設計は両立できない。
PCならまだしも、モバイルやコンシューマではきつい。

まずはよい見本を探す

良い設計を覚えるには良い見本を見ましょう
UE4で良い見本となるのは「Action RPG」「Robo Recall」です
後は過去の資料など


設計思想についてUE4においてはGameplay Frameworkがあります。
これらを使いこなすといいでしょう。ドキュメントを読んでおくといいです。


設計における3つの考え方

オブジェクト指向
コンポーネント指向
・メッセージ

オブジェクト指向

一般的なソフトウェア設計手法

コンポーネント指向

オブジェクト指向と両方同時に使われることが多い。
原則としてプリミティブな機能を1つ持たせる、そして簡単に付け外しできる。

メッセージ

メッセージを飛ばして情報をやり取りする
これは依存関係をもたない、お互いがお互いをしらなくてもよいというのが特徴です。

MVCモデル

UE4では既に近い設計がされています。
基本的にこれらは一方向にのみ飛ばす。

 


再利用性

一定のルールを守る必要があります。これを守ったのがコンポーネント
なのでコンポーネントを増やしていくことによって再利用性が高くなります。

ルール

・外の処理には依存させない
・ひとつのコンポーネントにはシンプルな機能をひとつ
・簡単に取り外しがきくようにする 外しても動くように
・外の処理を利用する場合、メッセージを使う

UE4では再利用しやすいものがたくさんあります
アクターコンポーネントなど


最初から再利用前提で作らなくていいです。
作った後再利用可能かを検討しましょう。
攻撃処理やアイテム管理など、うまく切り取れれば後で使いまわすことができます。


依存関係

設計するうえで悩む部分、何かに依存するということは設計の幅を狭めてしまう。

UE4で依存関係を確認するにはリファレンスビューワーで見れます。
この依存関係をなるべく断ち切る。

何も考えないと後から切れなくなってしまうことも。

対処法

・複雑なアセットを参照しない
多くのアセット情報を持つブループリントを直接参照しないこと

・キャストをなるべくしない
ブループリントはかなり手軽に他の情報にアクセスできるが、これによって依存関係が簡単に増えてしまう。

・同じボリュームの変数を作成しない、

 

基本戦略

メッセージを使うことを考えましょう。インターフェースを使いましょう。

カプセル化

インターフェースを使うことでオブジェクト間が抽象化されることで、カプセル化され依存関係が発生しません。

タグの利用

タグというのは単純な文字列。
文字なので依存関係が発生しない。パラメータの情報を持たせることもできる。

Gameplay tag

複雑なタグを管理したいときに使いましょう。


ハード参照とソフト参照

参照は2つあります。リファレンスビューワーで確認可能。

ハード参照

通常は全てハード参照。
依存関係にあるものが全てメモリに展開されます。
できればハード参照させたくないが、規模が小さいものやインディーゲーム程度なら大丈夫。

ソフト参照

こちらはちょっと特殊。

AssetManager

これをつかうことによってどのように参照されているかを知ることができます。
この辺を意識することでロード時間を短縮することができます。

 


イベントドリブン

イベントが発行されて、それで処理を行うという考え。
イベントが発生するまでは処理が行われない。

Tick依存による設計

ループの中で処理をするやり方。昔ながらのやりかたで設計が楽。
しかしTick自体は重たい。ただのループではなく、裏でいろいろやっているので重い。
なのでTickをまずは切りましょう、

じゃあTickなしでどうするのか、これはイベントドリブンで解決します。
ブループリントでは使いやすいが、C++では使いづらい。

 

BPとC++

C++のメリット、BPのメリットはたくさんあります

よくある誤解としてBPは本当に遅いのか。
これは半分正解で半分間違い。
実際はC++で作った機能をブループリントで呼び出すのは問題ない。

まずはC++にする前にBPがネックになっているのか、プロファイラーで確認しましょう。

 

ハードコード

C++上で値を直接書き込むこと。これをすると調整を一気にやりにくくなる。
公開すればいいというものではないが、プログラマー以外が触るのが面倒
C++からのアセット参照に注意しましょう。
C++ではFinderを利用するとメモリを消費したり起動時間が伸びたりします。


理想的な設計を目指すために

依存関係を少なく、取り回ししやすいようにする
・アクターは単体で動作するようにする
・キャラクターのAIはUE4の優秀なAI Controllerクラスを使いましょう。簡単に変更することができます。
・依存部分を外部から注入

依存部分はアクターが抱えないようにする
外部へリクエストする、または外から与えられるようにする


まとめ

設計のお手本を見ましょう
設計指向を理解する
再利用性をあげる
依存関係に注意
イベントドリブンを意識する

 

 

 

 

 

#2 「基礎から学ぶ!UE4C++を交えたAI開発、興味ないですか?」

基礎から学ぶ!UE4でC++を交えたAI開発、興味ないですか? - Speaker Deck

皆さんはAIの開発はどのように行っていますか?
今回はキャラクターAIをやっていきます。
キャラクターAIは人間のような知性を持つかのように行動するAI。

知能のリアリティとは何か

ユーザが期待する行動をAIに蓄積させる飛鳥がある

感情を表現するための演技

環境を認識していいるように見せたり
AIのボキャブラリを充実させることでゲーム自体の没入感が増します

反射

敵からの攻撃を避けたり、回復させたり、人間のような反射行動をとらせる。

群れ制御

NPC同士の衝突、障害物の回避をさせる。環境や相手を認識させること。

 

 


じゃあどういうアルゴリズムを使えばいいのか。

いろいろありますがUE4ではステートベースとビヘイビアベースが主になります。

ステートベースAI

現在の状態や行動を元にして、設定してある遷移条件で次の行動を決定する。
制御の切り替えは高速だが、拡張性は乏しい。
よくあるのがEnumで制御すること。

 

ビヘイビアベース

ノード配置し今取れる行動で次の行動を考えること。

 

UE4でのAI開発に使えるもの

・AI Controller
・Behaviour Tree
・Black Board
AIが収集したデータ、敵の位置や優先目標などを保存しておく場所。
・Navigation Mesh
経路探索
・EQS
複数の条件式を与えて、最もスコアの高い情報を求めてくれる機能
・AI Perception
センサをつけること


UE4でのノードの種類

・タスク
ノードの末端
行動をつかさどるノードのこと

・コンポジット
タスクの実行順番を決める中間ノード

・サービス
子ノードが実行されている間、指定した毎秒にサービスノード内の処理を実行することができる

・デコレーター
条件式として使用できるノード

サービスとデコレーターは複数個つけることができます

・ルート
全ノードの頂点
ノードは左から右へ処理されていきます。


よむねこで作ったAIのTipsをQittaで公開しています。

qiita.com


もっと詳しく知りたい時は三宅さんの本を読みましょう。
おそらくこれ

人工知能の作り方 ――「おもしろい」ゲームAIはいかにして動くのか

 

 

 

 

 

 

 

#3 「キャリアプラン?何それおいしいの?」

キャリアプランとは、
キャリアとは取り組んだ結果ではなく、労働の継続的なプロセスとどういう風に生きていくかという生き方そのもの。

 

みなさんに伝えたいこと

その1 姿勢

・最初は技術バカを目指してください
ただし、真正面からは戦わない ニッチ分野や迂回戦術でいきましょう。
・選んだ分野でも、さらに範囲を絞るのもアリ
キャラクターモーションの中でも、二足歩行のみやモンスターのみなど。

そのうえで根っこを抑える。
その分野の第一人者、有名人になる。
いないと困る人、全部を握っている人を目指す。

・技術者は管理職を嫌う
しかし管理者になると、予算・人員・権限がもらえます。
やりたいことができるようになります。

・変化を恐れない、受け入れる
仕事は変わる、上司は変わる、会社も変わります。
一つの分野でトップをとっても、10年後にはその分野自体消えるかもしれない。
生き残れるのは強いものではなく変化に適応できるもの。

・複数の選択肢を持つ
複数のプロジェクト、部署を兼任。
社内、社外、業界の仕事とやっていきましょう。
同人、ボランティア 十分得るものはあります
とはいえ何でもOKではない

 

その2どう選択するか

・好きなことをやろう
すきなことをやる人は本当に強い
しかし、それが金になるのか将来ためになるのか悩むことがあるのかもしれない
未来なんか誰にもわからない、気にしないでやろう

・人に頼まれたことをやろう
頼まれるということは、他の人よりも自分が適任と思われているということ。
自分の実力が発揮できることであれば、好きなことでなくともやってみるといい、
少なくとも、客観視での検証は終わっている。

またやり始めたら、まるで自分が望んでいたかのようになる。

・事実は変わらない
あなたの希望や望みは現実世界(プロジェクト)に何一つ影響がない。
金や名誉欲につられるとまず失敗する。
自分ひとりで解決できることは失敗する要因にはならない


最終的に目指すべきゴール
・消えていくものに固執しない
金とか地位とか友人とかどうでもいい
vimとかemacsとかどうでもいい


・最終的には名前しか残らない
作品、本、Webサイトなど。なので悪いことをしてはいけない。
名を残すことが大事。
その為にも今の健康メンタルが最優先です。

 

それをやった結果、未だに平社員、でも幸せです。

 

 

 

 

 

 

LT1. 「初海外で英語が出来なくてもノリで行く、GDC3日間の旅」

本人がキャンプのため動画のみのLT。
動画は後でYoutubeにアップされるそうです。

 

 

 

 


LT2. 「UnityでAddComponentするだけで3DViwerを作れた話」

www.slideshare.net

スマホ向けの3Dゲームで、3Dキャラクターを表示するビューワーが欲しい時。
Unityは使えるがサイエンスなものは苦手という方に。

スライドが公開予定なので、詳細はそちらをどうぞ。
公開されました。

 

おまけ リリースするまえにやっておいた方がいいこと

勢いが徐々に止まるようなバネをいれる。
3Dモデルが長物などを持っている場合は、対象物に合わせてスケールする必要がある。

 

 

 

 

 

LT3. 「できる! VRM for UE4

できる! VRM for UE4 / VRM4U-UE4 - Speaker Deck

UE4VRMを扱うときはVRM4Uを使います。
UniRVのようなもの。

インポートするだけで使えます。そういうツールです。
GitHubで公開しているツールです。

なのでUE4ユーザもVRM界隈を盛り上げていきましょう。Unityでよくね

 

 

 

 

 

 

タイムライン

 

 

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