simplestarの技術ブログ

目的を書いて、思想と試行、結果と考察、そして具体的な手段を記録します。

Online Game

Unity:はじめてのAddressable Assets(AWS CloudFront に S3 バケット設定でCDNを有効化)

前書き 未公開の作業記事が形にならないまま積み重なっていますが、明確なゴールとして切れる課題が見つかったので今回の記事を書きます。はじめての Addressable Assets と題して、AWS の CloudFront についてもはじめて触ってみて Unity のアセットを CDN …

2019年を振り返る

1月 VRMとやらを触ったり、新しい InputSystem とかゲームの土台に導入してみたり、Unity でのゲーム作りについて勉強してました。simplestar-tech.hatenablog.com 3月 AWS を Unity から直接さわるなど、オンラインゲームを作るためのインフラの調査とか始…

PlayFab:CloudScriptの実行頻度からクライアントを改竄したリクエストを無視する

前置き 自作ゲームの PlayFab におけるチート行為防止の話です。現在の見た目(ここのところ変わってませんね)キューブで構成される世界データをたった一つのサーバーに格納しています。 simplestar-tech.hatenablog.com今のところユーザーからのリクエスト…

CubeWalk:カスタムデータを更新するリクエスト CloudScript の実装

構想7ステップの4つ目 半月前の構想をまとめたものがこちら simplestar-tech.hatenablog.com今回は表題の通り Microsoft PlayFab の CloudScript を用意して、クライアントで行うアイテムslot変更操作をサーバーに反映させます。 クライアントでスロット操作…

CubeWalk:マウス操作でインベントリのアイテムを移動できる機能

概要 半月前に構想した内容がこちら simplestar-tech.hatenablog.com前々回、前回で進んだ内容が以下 1.R Ctrl でキューブ、SideA, SideB キューブと配置形状が切り替わる 2.オンラインのインベントリ情報を受け取って表示する機能今回は 3/7 ステップと…

CubeWalk:インベントリ情報を受け取って表示する機能

概要 構想によって作られたステップ 2/7 を今回はクリアしたいと思います。 simplestar-tech.hatenablog.com表題の通り PlayFab からインベントリの情報を取得して、これを UI で表示します。 簡易なシーン PlayFab のスクリプトをシーンに追加して試験環境…

PlayFab:キューブ破壊後にキューブデータをインベントリへ格納

キューブ保存の法則 世界のデータは減りも増えもしない(神様の創造は例外) キューブを破壊しようとしたら、その破壊をバイナリキャッシュサーバーが判定し 成功したならインベントリにそのキューブの情報が格納される仕組みを作ります。 インベントリの操…

CubeWalk:水平な世界データから始める

はじめに PlayFab ログイン成功後、CDNから世界圧縮データを取得し Unity で展開してから、それぞれのチャンク配列を確保し、データを詰めていく 詰め終わったら、ゲームシーンを開始する世界圧縮データを最初は作らなければならない 世界データは16,777,216…

PlayFab:golangサーバーからCDNのFileContentにファイルをアップロード

概要 やりたいことは半年前から変わらず、キューブの世界のデータをバイナリキャッシュサーバーに置き PlayFab ログインユーザーが Unity クライアントから CDN 経由で最新の世界データを引いてくることです。 できれば圧縮したファイルをユーザーに届けたい…

AWS:golangバイナリキャッシュサーバーがS3にバックアップを保存&復帰

前提 http リクエストで int データを受け渡すバイナリキャッシュサーバーが完成しています。前回の作業記録をなぞるだけ simplestar-tech.hatenablog.com 大きな目的 PlayFab の CloudScripts から int or byte x 4 データを受け渡すバイナリキャッシュサー…

AWS:golang Web Server を binary cache DB とする2/2

前回までのあらすじ simplestar-tech.hatenablog.com Amazon にクレジットカードを登録してボタンをいくつか押すと、世界に向けて golang のサーバーが TLS の秘匿通信で公開され ログ拡張でアプリの動作の内容がわかるところまで、初心者でも Web サーバー…

AWS:golang Web Server を binary cache DB とする1/2

go 言語で巨大な int 配列の確保と利用 ゲームではキューブは 4byte の情報構造体で値は int 32bit の配列で格納したいと思っています。 go でも C++ のように int 配列作って、ポインタで保持しておけばいつでもランダムアクセスできるんですよね? をコー…

AWS:WebサーバーをGoLangで

前書き ゲームはローカルでブロックを破壊・配置できる基本の枠組みが整いつつあります。 ここで破壊したときに世界からブロックの情報を破棄してプレイヤーのインベントリに追加しなければならず 配置したときにインベントリから消して、世界に配置しなけれ…

Azure:Redis Cacheサーバーを立ててみる

確認したいこと やりたいのはトークンによる認可と文字列データのやりとり バックアップの取得を自動化して解析結果を利用かな はじめての Azure Azure を使ったことないので、ちょっとどんなものなのか見てみます。 とりあえずアカウントを作って、コンソー…

Unity:CubeWalkゲームの起動方法

Magic Onion やその他さまざまなパッケージに頼っているため、インストールの仕方を間違えると起動しないという問題があります。 エラーもすごくわかりづらい… いつまでも記憶しておくことはできない、ゆえにコストを割いてここに記録しておきます。 Unity …

CubeWalk:キューブの選択

まえがき 2度の作り直しを経て、現在は VRoid Hub SDK 経由で VRM キャラクターデータを利用して Cube の世界を自由に歩き回ることができるようになっています。 www.youtube.comバックエンドサービスの PlayFab の CloudScript から API Gateway と Lambda…

AWS:お金のかからないElastiCache活用術3

simplestar-tech.hatenablog.com の続きローカル環境で Cube データを仮で Redis Mass Insertion するための plotocol を生成する C# コードがこちら using System.IO; using System.Text; namespace CubeWalkDataMaker { class Program { static void Main(…

AWS:お金のかからないElastiCache活用術2

simplestar-tech.hatenablog.com のつづき 適当な値を redis に詰める ローカルに立てた Redis 5.0.5 サーバー、適当な値を詰めてみます。 たとえばkey : value 9999 : 100 ffff : 100 abcd : efghこれを前回導入した rdb-tools で json に出力してみましょ…

AWS:お金のかからないElastiCache活用術1

まえがき CubeWalk ゲームは…キューブを置く処理に不正がないようサーバーで実行されます。 世界の情報はたった一つのサーバーであるため、負荷分散を考えて DB は同時アクセスに耐えられる DynamoDB などを考えてみましたが 世界データを格納するだけで 600…

AWS:はじめてのAPI Gateway⇄Lambda

概要 前回の Lambda と ElastiCache は VPC 内に引きこもるため(そういうセキュリティグループに配置したので)、インターネットからアクセスすることはできません。 simplestar-tech.hatenablog.com API Gateway からトークン認証付きで Lambda を呼べるよ…

AWS:はじめてのLambda⇄ElastiCache

概要 PlayFab のバックエンド処理が AWS と連携できます。 具体的には同期 http 通信が行えるので、そこを AWS の API Gateway → Lambda → ElastiCache とつなぎます。 前回の記事 simplestar-tech.hatenablog.com で確認できた ElastiCache と Lambda の接…

AWS:はじめてのElastiCache

まずはチュートリアルに従って動かしてみましょう。 docs.aws.amazon.com ステップ 1: クラスターを起動する 気にするべきは、新しいセキュリティグループを作成しておくことです。 インバウンドポートは 6379 でソースIPは別途用意した EC2 インスタンスの…

VRoidHubにログインしないでゲームを続けられる実装調査

ログインしないときの動作を策定するにあたり、現状を整理し、作業ログを残します。 簡単に今のフローをおさらい VRoid Hub のログインは VRoid SDK のサンプルに任せっきり ゲームを起動すると起動直後「VRoid Hub に接続」ボタンを表示、同時に「☓」の閉じ…

PlayFab:ログインタイミングを気にせずプログラミングする術

最初にひらめいたのはアクションをキューイングすればいいんだよ!の一言言葉をプログラムに書き下すと次の通り ちゃんと期待通り動いた前の記事 simplestar-tech.hatenablog.comの TitleData を取得する関数の処理、コールバックで成功を返すつくりなので、…

PlayFab:タイトルデータで接続先サーバーを知る

基本はここで学びます。 qiita.com任意のデータ構造を配列で取得できるようになったら、少し汎用的なタイトルデータ取得コードを記述します。C# でジェネリックの型名を文字列で取得するには var type = typeof(T); var titleData = JsonSerializer.Deserial…

Magic Onion:複数ポート番号のサーバーをdockerコンテナで

手順だけ記録しておきます。基本 qiita.comここで Dockerfile を記述しているけど FROM mcr.microsoft.com/dotnet/core/runtime:2.2 WORKDIR /app COPY . .とエントリポイントを削除あとサーバー側の実装で引数一個目で port 番号を受け取って利用するように…

PlayFab:Unityゲーム内課金システムPayPal編

個人ゲーム制作でも何百万人にも膨れ上がるユーザーを平気で捌ける順応性のあるバックエンドサービスを短期無料で作れる時代になりました。 Amazon の GameSparks, Google の Firebase, Microsoft の PlayFab, 富士通クラウドテクノロジーズのmobile backend…

PlayFab:UnityのバックエンドとしてのAWS入門

不正を許さないため、オンラインゲームは基本的に現実のお金でのアイテムの購入、ゲーム内の仮想通貨やアイテムの交換はクライアント側では行わずにサーバー側で行います。 そうした不正を許さないバックエンド処理に使う api とデータベースをほぼ無料で使…

Unity:Amazon DynamoDB を C# から利用する

高速読み書きがスケーラブルなデータベース Dynamo DB を Unity から利用する 現在のルームメンバー一覧を取得したいとか、これからジョインするルームを決めるときに、ルームに何人入っているのかなどを確認したいときがあるのです。 S3 にファイルとして情…

Unity:オンラインVRMチャットサンプルの作り方4

数十MBある大きいVRM データのリアルタイム送受信 最後まで読むとできるようになる絵この記事の続きです。 simplestar-tech.hatenablog.comMagic Onion を Unity 間のリアルタイム通信に使いましたが、送受信するデータが 1MB より大きくなる場合は別の手段…