投稿

UnityでWebGLビルドしたビルドファイルをアップロードせずローカルサーバーで起動する(Unity 初心者)

 はじめに Unityでゲームを作る際、色々なビルド先があると思いますが、その中で私がよく使っているのがWebGLのビルド。簡単に作成したゲームを展開できますし、unityroomなどのゲームをアップロードするサイトなどに自作ゲームをアップロードするだけで多くの方に手軽にブラウザ上で遊んでいただけます。 さて、このWebGLビルド、手軽なのですが私のような回線弱者はサイトにアップロードする際、すごく時間がかかり、その間、他のネットを使う作業ができなくなります。 私が作業できなくなるのは別に構わないのですが、家族がいるので家族もネットを使うことがアップロードしている間ほとんどできなくなります。 なので夜中など家族が使わない時にアップロードしているのですが、これだと仮にアップロードしてから問題が発生した際に、またアップロードする時に夜中を待たなければいけません。 これはめんどくさいので、サイトにアップロードしなくても(ネット回線を使わなくても)WebGLでビルドしたゲームを試せるようにできないか?と思いました。 Unityでビルドする時にできるじゃん。 はい、できます。ビルドする時に「ビルドしてプレイ」みたいなビルドをするとビルドが成功した後にブラウザが立ち上がり、ゲームが実行されます。 しかし、この方法はあくまでもビルドした時に使用できるだけで、すでにあるビルドファイルをビルドはできません。(できたらすいません。) 前のビルドはどうだったっけな?みたいな時にビルドファイルごとに試せるようにした方が私自身は良かったです。 本題 ということでChat GPTさんに聞いたところ、一番簡単そうなのは「Pytonでローカルサーバーをたてる」でした。 追記:Node.jsとnpmでも同様にローカルサーバーをたてれます。こっちの方が後述するサーバーをカスタムする必要がなさそうなのでこっちの方がいいかもしれません。私はNode.jsは利用したことがないので、Pythonでやってみました。 ①Pythonをパソコンにインストール 私はPythonを利用したことがあったので、すでにインストールされていましたが、Pythonを利用したことがない人はインストール方法調べてください。 ②

動的にScriptableObjectを生成する - (Unity初心者)

 はじめに 敵の設定パラメーターやステージ情報などのゲーム実行時には変わらないデータを格納するのに便利なScriptableObject。 今回はこのScriptableObjectを動的に(処理を書いて自動で)プロジェクトのアセットに作成する。 コード全体 #if UNITY_EDITOR using UnityEditor; #endif namespace Myfolder.DataBese { public class StageCreator { private const string GENERATE_STAGE_ASSETPATH = "Assets/Myfolder/DataBase/generateStage"; public static void CreateStageAsset(Stage _generateStage) { #if UNITY_EDITOR // 同一ファイル名が被らないようにする int fileCount = 1; var assetPath = GENERATE_STAGE_ASSETPATH + $"/{fileCount}.asset"; while (AssetDatabase.LoadAssetAtPath<Stage>(assetPath) != null) { fileCount++; assetPath = GENERATE_STAGE_ASSETPATH + $"/{fileCount}.asset"; } // ScriptableObjectをアセットとして保存 AssetDatabase.CreateAsset(_generateStage, assetPath); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); #else Debug.LogError("This method sho

PlayFabでタイトルデータを扱う(Unity初心者)

イメージ
 はじめに Unityでゲーム開発をしていて、ランキングやログイン機能などのサーバーと連携する必要がある場合、私はPlayFabというBaaSを利用している。 今回はこのPlayFabを利用して、ゲーム上で制作したステージデータをタイトルデータとしてPlayFabに保存して、その保存したデータからステージを作成しようと思う。 PlayFabについて PlayFab とは? タイトルデータの作成 タイトルデータはゲーム上であまり変動がない値を設定するデータであるからして、Unityに導入されたPlayFabSDKにはタイトルデータをゲーム側から設定する処理がない。 基本的な使い方はPlayFabのダッシュボード上で手動でkeyとvalueを登録する。 しかし、今回はゲーム中で作成したステージデータを一時保存用にタイトルデータにJSONデータとして保存したい。 なので、REST APIを用いてタイトルデータの作成を行なった。 以下はPlayFabのタイトルデータを送信する全体のコード [Header("タイトルデータ用API情報")] [SerializeField] string setTitleData_endPoint; [SerializeField] string developerSecretKey; /// タイトルデータを登録する public async UniTask SetTitleDataFromJsonAsync(string _json) { //現在のタイムスタンプを使用して一意のキーを作成 string key = DateTime.Now.ToString("yyyy/MM/dd[HH:mm:ss.fff]"); //リクエストの作成 string requestBody = $"{{\"Key\":\"{key}\",\"Value\":\"{_json.Replace("\"", "\\\"")}\"}}"; //JS

VContainerを触ってみた。その3,注入するInputの変更 (Unity初心者)

 前回まで その1 その2 今回 よくあるPlayerの移動のInputの取得方法を分けてPlayerが参照するInputをDIコンテナ側で注入する際に注入するInputクラスを選ぶことでPlayerの移動方法を変える。 ①InputHandlerインターフェイスを作成 public interface IInputHandler { Vector3 GetInputDirection(); } このインターフェイスを継承してGetInputDirectionでそれぞれの入力の違いを出していく。 ②IInputHandlerを継承したクラスを作成 //方向キーでの移動 public class InputFromArrow : IInputHandler { public Vector3 GetInputDirection() { if (Input.GetKey(KeyCode.UpArrow)) return Vector3.up; if (Input.GetKey(KeyCode.LeftArrow)) return Vector3.left; if (Input.GetKey(KeyCode.DownArrow)) return Vector3.down; if (Input.GetKey(KeyCode.RightArrow)) return Vector3.right; return Vector3.zero; } } //WASDでの移動 public class InputFromWASD : IInputHandler { public Vector3 GetInputDirection() { if (Input.GetKey(KeyCode.W)) return Vector3.up; if (Input.GetKey(KeyCode.A)) return Vector3

VContainerを触ってみた。その2,MVPパターン (Unity初心者)

イメージ
 前回まで 公式リファレンスのHello Worldをやりながら自分なりにまとめた。 <<前回 今回 前回のボタンを持ったViewにTextを追加して、ボタンを押すたびにViewのTextの数字を増やしていく仕様を作った。 MVPパターンでやってみる。 前回作ったクラスに追加していく形にする。 VContainerのテストなのでUniRxとかは使わずにやってみる。 ①HelloScreen(View)にTextを追加。 シーンにTextを追加して、HelloScreen(View)にTextコンポーネントの参照を追加。 またテキストを更新する処理を作った。 public class HelloScreen : MonoBehaviour { public Button HelloButton; public Text countText; //追加 public void UpdateText(int _count) //数字を引数にその数字にテキストを変更 { countText.text = _count.ToString(); } } ②CountUpModel(Model)を作成。 ボタンを押すたびにカウントを上げるので、今のカウントとそのカウントを上げる処理を実装したCountUpModel(Model)を作成した。 public class CountUpModel { int nowCount; //現在のカウント public int NowCount => nowCount; public CountUpModel() { nowCount = 0; } public void CountUp() //カウントを増やす { nowCount ++; } } ③GamePresenter(Presenter)に先ほど作ったCountUpModel(Model)のフィールドを作成。 Presenterに注入するModelのフィールドを作成。 IStartable.Sta

VContainerを触ってみた。その1,HelloWorld (Unity初心者)

イメージ
 はじめに 最近ゲーム作りにおけるデザインパターンなるものを気にしながらゲームプログラムを書いている。その延長上でDependency Injection(DI)なるデザインパターンがあり、Unity上で動作するDIフレームワークのVContainerを使ってみる。 Dependency Injection(DI)とは 直訳すると依存性注入。 DIとは、プログラミングにおけるデザインパターン(設計思想)の一種で、オブジェクトを成立させるために必要となるコードを実行時に注入(Inject)してゆくという概念のことである。 参考: https://www.weblio.jp/content/Dependency+Injection   なぜVContainerなのか もう一つUnityのDIフレームワークで有名なZenjectというものがあり、最初そちらを触ってみたのだが、どうやら調べてみるとVContainerの方がパフォーマンスがいいらしい。 ぶっちゃけ初心者にパフォーマンスの違いとかわからんが、まぁいいと言われているものを使った方がいいだろうということで。 あと、日本語のリファレンスがあって、何か詰まったら調べやすい気がした。 VContainer日本語リファレンス 導入 新しいプロジェクトを作成するか、既存の導入したいプロジェクトを開く。 Packages/manifest.jsonファイルを開く "dependencies": { }内に以下のコードを追記(古くなっている可能性があるので、最新版を上のドキュメントURLからコピーした方がいいです) "jp.hadashikick.vcontainer":"https://github.com/hadashiA/VContainer.git?path=VContainer/Assets/VContainer#1.15.3" これでインポートされるはず。 チュートリアル 公式リファレンスの Hello World をやっていく。 (以下はリファレンス通りにやっているだけなんで飛ばしてOK) 自分

Macでコピペをもっと使いやすくする「Clipy」を使ってみた

 はじめに ブログやプログラミングをしているとコピペをする機会が多いのだが、ある動作をするときに決まってコピペするようなことが結構あって、それをするたびにコピーするのはめんどくさいと思ったので、日頃使っているコピーを覚えておけてすぐにショートカットでペーストできるようなものはないかと思った。 Clipy https://clipy-app.com/ mac使っている人には結構有名? いわゆるスニペットアプリ。 上のURLからダウンロード。 使い方 以下のURLがわかりやすかったです🙏 https://suzu.link/macclipy/