simplestarの技術ブログ

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

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

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

「NORMALMAP ONLINE」ノーマルマップをノイズ画像から作る

前置き 水面の波を作ろうと思って、Normal Map 作成の壁?に当たったので、濃淡画像に sobel フィルターとか与えて法線マップ作るプログラムを書こうとしたのですけど 一般的な問題すぎるので、ネットに転がっているだろうと調べたら、Web アプリとして公開…

2019年を振り返る

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

CubeWalk:ブロックの破壊と配置後にアイテムビューで更新結果が反映されている

構想の 5/7 ステップに来ました 毎回更新を見てくれているみんなにはなじみの構想記事 simplestar-tech.hatenablog.com今回は前回 4.5 ステップとしてやるべきと示したブロックの破壊と配置によるアイテムスロットの操作と その時に行われるリクエストの反映…

CubeWalk:スロット番号をリクエストするとアイテムが増えたり減ったり

前置き ゲームに登場する世界データは全プレイヤー間で一つ 配置場所を表すインデックスでアクセスし、データは 32 bit のキューブ情報の集合体です。 クライアントから直接この世界データにアクセスするにはインデックス指定は必須だと思いますが、配置する…

CubeWalk:ホットバーUIの作成

前置き だんだん作るものが具体的になってきました。 現在はキューブを配置するときのためにホットバーが必要です。 インベントリ操作は Inventory モードに入ったときで、そのときにはホットバーが不要 それ以外の Explore モードではホットバーが必要です…

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

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

Unity:ゲーム開始前にロジックでヒエラルキー編集

概要 アイテムのスロットを結構な数 たとえば 81 個とか追加して、連番で名前を打つといった作業 3~4個リネームしている途中で手を止めて、プログラムに任せたくなりますよね(守るべきは時間ではなく、心) PlayMode にせずにスクリプトからヒエラルキーを…

Unity:Animatorからステートを取得

前書き ゲーム開発していて、入力モードが増えてきて、ステート管理していきたいと思う中 Unity の State Machine って Mecanim の AnimatorController だなぁと気づき デバッグ時にステートを遷移を可視化しつつ、これをスクリプトから操作や取得できたらい…

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 のスクリプトをシーンに追加して試験環境…

CubeWalk:R Ctrl でキューブ、SideA, SideB と配置形状が切り替わる

概要 構想に近づけるため、最初のステップを踏みます simplestar-tech.hatenablog.com 右クリックすると無限に 2 x 2 のプリズムを配置する現在 これを右クリック中 R Ctrl キーを押すと、プリズム A, プリズム B と切り替わり その時に右クリックを終了する…

CubeWalk:インベントリシステムの構想

概要 長いことクライアントで閉じていた処理がサーバーで行われるようになりました。 simplestar-tech.hatenablog.comふわふわしているアイテム操作のイメージを少しずつ固めていく工程を記録してみます。 構想というやつです。最後に具体的なアクションリス…

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

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

CubeWalk:世界の境界の向こう側は無

世界データは最大 67MB まずは事実から バイナリキャッシュサーバーに 16 x 16 x 16 x 16 x 16 x 16 x 4 byte のデータを格納しています。 一時間おきに PlayFab からパスワード付きのリクエストを https で送信して PlayFab の CDN に gzip 圧縮データをア…

PlayFab:ログインタイミングを気にせずプログラミングする術~ファイル編

コンテキスト PlayFab から世界データ拾ってきたいなぁ でもログインまだだった 失敗なんてことが絶対に起こらないようなPlayFab から世界データ取得を成功させる仕組みを考えたい もう作ってた! simplestar-tech.hatenablog.comしばらく Unity から離れて…

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:キューブの配置

前書き 破壊についてはこちら simplestar-tech.hatenablog.com今回は配置を考えていきます。作る前から見えている絵は…右クリック開始で 配置先が見える アローキーで配置先が回転 右クリック解除で配置具体的な実装を進めてみましょう。 前回の配置は? 以…

Unity:UniversalRP de ToonMasterNode(v7.1.2)

いろいろ頑張った結果公開することにgithub.com以下は実装時に記録したメモです。 絵を作るまでにほんといろいろ調べたのですが、基本 PBR のものまねなので、深く理解できない部分が多いです 断片的なメモになりますね。個人ブログなのでゆるしてToonMaster…

Unity:CubeWalkゲームの起動方法

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

Windows Subsystem for Linux(WSL)で Docker を利用する

前書き Docker for Windows 派なのですが、仮想化環境だったとしても Hyper-V が対応していない PC だったりして、結局 Docker for Windows や WSL2 が起動しないなんてことになってます。 AWS などで、お安いインスタンスを借りることで Linux 環境は整いま…

Unity:UniversalRP de MasterNode (v7.1.2)

目まぐるしく変わる Unity の Universal RP の実装その実装に合わせてカスタム MasterNode を作り替え続ける備忘録である 手順 Unity 2019.3.0b6 を落して、テンプレートに Universal RP を選ぼうUniversalRPテンプレートを選ぶ起動すると次の画面になります…

Unity:CubeWalkゲームのキューブの破壊

前作のキューブの破壊は? 今回の更新で洞窟やかまくらが作れるようになりました昔はこんな感じでキューブの位置から、キューブのデータを特定していた模様 internal unsafe bool GetCubeByPosition(Vector3 position, out Vector3Int chunkIndex, out Vecto…