Slide 1

Slide 1 text

Rustで対戦型 Tetrisを作った話 限界LT #⌊π⌋ しゅん

Slide 2

Slide 2 text

自己紹介 ’ 名前: しゅん ’ Twitter: @shun_shobon / GitHub: @shun-shobov ’ 学校: 長野高専 電子情報工学科 5B ’ 興味: Web Frontend / Web Frontend Ops / A11y な$ ’ 研究: ホログラフィ / ヒューマンインタフェースな$ ’ 趣味: ゲーム / 自作キーボーI ’ 一言: コンピュータと人との関わり方を模索しています

Slide 3

Slide 3 text

作ったもの

Slide 4

Slide 4 text

作ったもの Q 対戦型のTetriD Q ライン消去で相手にお邪魔を送れG Q なるべく既存のルールに忠実に実B Q Tスピンや回転入れも可能

Slide 5

Slide 5 text

経緯

Slide 6

Slide 6 text

ネットワークプログラミングIIの課題 ぼく「自分が作りたいように作るか〜〜」

Slide 7

Slide 7 text

何を作ろう 先生「適当でいいやって人は例年授業中に作った三目並べを四目並べにして提出いますね」 先生「あと過去にすごいもの作った人は麻雀とか作ってました」 他の人「Siv3Dでゲームでも作ろうかな」 ぼく「僕もTetrisでも作ろうかな」

Slide 8

Slide 8 text

僕のゲーム制作記 ゲーム1: 中3にPythonで作ったオセロ ゲーム2: 中3にPythonで作ったブロック崩し 以上 >> 5年ぶりのゲーム制作 << まあ去年にC言語でミニゲーム作ったけどそれは入れない方針で...

Slide 9

Slide 9 text

技術選定 言語→TSは飽きたからRustでも使うか フレームワーク→なないが触ってたBevy使うか 通信→WebRTCで作ったらええやん 雑に技術スタック決定

Slide 10

Slide 10 text

Bevyの概要

Slide 11

Slide 11 text

Bevyの概要 a Rust純正のゲームエンジD a 2D・3Dどちらも対0 a 画像・音声対0 a キーボード・コントローラ・タッチ対0 a クロスプラットフォーS a Wasmも対応 a ECSというアーキテクチャを採用

Slide 12

Slide 12 text

ECSとは Entity: ただの識別用ID Component: Entityに紐づくデータ(構造体) System: 上記2つやリソースなどを操作する関数 Entity,Component,Systemの3つを組み合わせていくデータ指向アーキテクチャの一種.

Slide 13

Slide 13 text

EntityとComponent Entityには0つ以上のComponentを持っていて,Componentや位置情報やマテリアル,ゲームの ロジックで使用するデータなどを持っている. Entity (1) Translation (10, 5, 3) Name (Alice) Player Health (20) Entity (2) Translation (3, 10, 3) Name (Bob) Player Health (40) Entity (3) Translation (5, 20, 2) Enemy Health (40)

Slide 14

Slide 14 text

EntityとComponent Commandsを使用して新しくEntityをSpawnさせたり,逆にDespawnさせたりできる.

Slide 15

Slide 15 text

System 特定のタイミングで実行される関数.EntityやComponentの操作が主.Queryを使うことで Entity内の特定のComponentを取得でき,参照や変更が可能.

Slide 16

Slide 16 text

Resource 特定のEntityに紐づかない,大域的なデータを扱うためのもの.

Slide 17

Slide 17 text

Event 主にSystem間で処理をやり取りするのに使える.

Slide 18

Slide 18 text

ネットワーク

Slide 19

Slide 19 text

Bevy Assets BevyにはAssetsというページがあり, いろんな3rd partyライブラリがジャン ル別に紹介されている. 今回はMatchboxというライブラリを採 用した.

Slide 20

Slide 20 text

Matchboxとは Rust製のWebRTC用ライブラリ.Wasmに対応しており,低レイヤーのことを考えずにWebRTC通 信ができる.シグナリングやサーバー用のライブラリも提供されており,bevy_matchboxでBevy のResourceやComponentとしても使用することができる.

Slide 21

Slide 21 text

今回の通信 フィールドのブロック情報を全て送受信すると重たいので,ミノが設置されたタイミングでフィー ルド更新情報をブロードキャスト. v ミノが設置された位置・向き・種` v 消去されたラインの位p v せり上がったお邪魔の数・穴の位置

Slide 22

Slide 22 text

今回の通信 フィールドのブロック情報を全て送受信すると重たいので,ミノが設置されたタイミングでフィー ルド更新情報をブロードキャスト.その他お邪魔の送信やゲームオーバーなども送信するようにし ている.

Slide 23

Slide 23 text

作ってみての感想

Slide 24

Slide 24 text

作ってみての感想 ˜ 本気でTetris作ろうとするとTetris自体が非常に複f ˜ Super Rotation System,Lock Down,Next..r ˜ ECSアーキテクチャは非常に使いやすいが癖が強% ˜ System間の実行順序が難しい→なるべくそれらに依存しないように作‚ ˜ Rustの型の厳しさのお陰で大幅な設計変更もそこまで苦がなくできた

Slide 25

Slide 25 text

今後の展望 A これどうにかしたV A Pluginを使って全体的なリファクタリン6 A 多人数戦への対 A ロビーシステÉ A Wasm対応+WebApp化