Raspberlyのブログ

Raspberlyのブログ

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

勉強会レポ : 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でよくね

 

 

 

 

 

 

タイムライン

 

 

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