投稿

ラベル(unity)が付いた投稿を表示しています

録画する機能 (windows10)

イメージ
 unity editor上で録画したいと思い、調べたところ unity recorderというものがあるらしいのですが、いまいちわかりませんでした。 しょうがないので、windows10に標準搭載されている録画機能を使ってみました。 「windowsキー」+「G」で「 ゲーム バー」なるものを開きます。 (logiのキーボードだとスタート/optキーがwindowsキーです。) こんな画面。 これの左上のバーの左から3つ目の丸ボタンが録画開始ボタンです。 もし押せない場合は、unity editorのプレイボタンを押した後なら押せると思います。 録画が終わったら四角ボタンで止めます。 デフォルトだと C:\Users\USERNAME\Videos\Captures にあります。(日本語だと PC/ビデオ/キャプチャ) mp4形式で出力されます。 youtube等で使いましょう。

クリック(タッチ)したら何か起こるけど、プレイヤーとは当たり判定が無いオブジェクトを作る

【目的】 2Dの横スクロールアクションを作っています。 クリック(スマホではタップ、以下クリック)できるオブジェクト(ボールとします)があって、 クリックするとプレイヤーがそのボールに向かってジャンプする(加速する)ものとします。 目的は、ボールとプレイヤーの当たり判定をなくすことです。 【プレイヤーの設定】 ・Spriteとしてオブジェクトを作ります。 ・Rigidbody 2D、Box Collider 2Dをアタッチ ・Layerをplayerなど、プレイヤーにのみ適用されるレイヤーを作って設定する ・ジャンプするスクリプトをアタッチ 例: public class ActorController : MonoBehaviour {     Transform myTransform ;     private Rigidbody2D rigidbody2D ;     float v_factor = 10f ; //6f;     // Start is called before the first frame update     void Start ()     {         // コンポーネント参照取得         rigidbody2D = GetComponent < Rigidbody2D > ();         // transformを取得         myTransform = this . transform ;         Physics . gravity = new Vector3 ( 0 , 20 , 0 );     }     float Abs ( Vector2 v ){         return Mathf . Sqrt ( v . x * v . x...

【コルーチン】処理順を大事にしたい時、処理を待ちたい時に使うコルーチンについて

C#スクリプトで、 処理1 処理2 処理3 の順番に書いた場合、 もちろん処理1,2,3の順番で実行されるのですが、 処理1が終わった後に処理2が始まるわけではありません。 処理1が終わった後に処理2を始めたい場合、 コルーチンを使うと便利です。 これで処理1が終わったあと処理2を始められたり、 その間に〇〇秒待つ、などの処理もできます。 また、何かの入力をしたら次の処理が始まる、 などもゲームではよくありますが、これもコルーチンで対応できます。 これらのコルーチンの使い方は  スタジオしまづ様の解説動画 によくまとめられています。 以下もし時間があれば内容を書く。

Boss Roomいじり2:キャラクター選択→適当な待機室を作成

イメージ
Boss Roomいじり、その2です。 前回はメインメニューシーンをいじって2Dキャンバスを追加することに成功しました。 今回は、CharSelect(キャラクター選択)シーンをいじります。 私のゲームでは、このシーンではプレイヤーは自由に動けるようにして、 マップ上のお店などで各プレイヤーの準備を整えるシーンにしたいと思っています。 なので、まずは2Dのマップを作り、2Dのキャラクターが動けるようにしたいと思います。 【キャラクターやマップの素材のダウンロード】 スタジオしまづ様による解説動画 の通りにやりました。 ぴぽや倉庫様 から素材をダウンロードし、 Assets > GameData2D > Character にキャラ素材をダウンロードしました。 Assets > GameData2D > Map にマップ素材をダウンロードしました。(32×32) スライス等の処理は動画の通りで、 まず、ダウンロードした画像たちに Sprite Mode: Multiple Pizels Per Unit: 32(これは32*32の素材だから) Filter Mode: Point(no filter) とします。 そして画像をクリックした時のInspectorの真ん中上くらいのSprite Editorにて、 SliceのTypeをGrid By Cell Sizeにして、サイズを32&32にします。 そしてSliceボタン、Applyボタンとクリックすれば素材をきちんと分割できます。 これで一枚の絵に収まった素材をいくつかのパーツに分割できます。 マップも同様にスライスします。 【キャラクターを置く】 適当な画像、ここでは動画の通りサンタ女子の二枚目の画像(正面)をドラッグして ゲームオブジェクトとして置き、名前をplayerにします。 【キャラクターの移動】 参考: スタジオしまづ様の解説動画 Asset > Scripts > 2DScriptsMoguというフォルダを作りました。 元々ある他のフォルダと分けたかったからです。 その中に、PlayerController.csを作り、上記のplayerオブジェクトにアタッチします。 そしてその中身は namespace Unity . Multiplayer . Sa...

Boss Roomいじり1:メインメニュー

イメージ
Boss Roomをいじっていて、 シーン管理が知らない形になっていました。 まずHierarchyタブにStartupシーンだけ読み込まれていて他のシーンは見えず、 Assets > Scenesの中にMainMenuやらCharSelectなどの他のシーンが 格納されていました。 ビルドするときのシーンの一番上はStartupシーンなので、 ゲーム開始時にはStartupシーンが読み込まれるはずですね。 それで、ゲームスタートするとStartupシーンではなく MainMenuシーンに移行していて「なんでStartupシーンじゃないの?」と思ったのですが、 Startupシーンの一番上(たぶん意識的に一番上に置いてくれている)に ApplicationControllerという重要そうなオブジェクトがあるので見てみると、 ApplicationController.csというスクリプトが貼られていました。中身の一部は こんな感じになっていて、確かにStart関数の中の最後に SceneManager.LoadScene("MainMenu"); とありますね。なので、本当にStartupシーンは読み込まれているんだけど、 一瞬でMainMenuシーンに移行しているわけですね。 ここから読み始めたら中身がわかりそうです。 と思って中を読んでみましたが、何一つわかりません。 どうやらここは触らず、このまま使えばいいのかもしれません。 ここで重要なのは、 BossRoomというゲームに直接関係あるもの(キャラクターとか)はすくないです。 ただし、GameDataSourceというGameObjectがあって、 そこにエモートなどが登録されているようです。 また、ConnectionManagerというオブジェクトに Assets/Scripts/ConnectionManagement/ConnectionManager.cs というスクリプトがあり、部屋の最大人数 MaxConnectedPlayers = 8; を設定しています。もし増減したかったらここをいじるべし。 そんなわけで、移った先のMainMenuシーンを見てみます。 色々ありますね。 【MainMenuState】 2つスクリプトがアタッチされています。 ・Network O...

Unity, 3D↔2Dの変更

イメージ
Boss Roomが3Dのプロジェクトで 私の目的は2Dなので、3D↔2Dの変更ができればいいなと思ってググったらありました。 いんでぃーづ様 メニューから Edit > Project Setting > Editor と開き、 Default Behaviour Modeを2Dにすると、 新規にシーンを作成した際、2Dの設定で立ち上がるそうです。 Boss Roomでやってみましょう。 上記の設定を行っても特に変化はわかりませんでした。 というのも、既存のシーンは3Dなので、新規で作り直す必要があるようです。 MainMenuというシーンがあるので、MainMenu2Dというシーンを作ってみたら、 めっちゃ3Dでした。 > カメラをOrthographic設定にします。 > この設定にすることで二次元感が出ます。 という記述があったのでカメラを確認したところ、2Dで作ったシーンなのでカメラも 自動的にOrthographicでした。 なんでやろと思ったら、 右上の2Dのところ(電球みたいなマークの左、三日月みたいなマークの右) がオフになっていたので、クリックすると2Dになりました。(画像はオンの状態) あとはCanvasに色々置くとカメラに映るはずですね。 とりあえずおわり。

Boss Room: a Co-op, Multiplayer RPG Sampleを触ってみる

イメージ
Unity公式のマルチプレイヤーゲームのサンプル: Boss Room: a Co-op, Multiplayer RPG Sample を使おうということで、以下勉強中に書いたメモを残しておきます。 基本的には公式からのdocument: Getting Started with Boss Room の通りに進めていきますので、新しいことはないかもしれませんが、 元のマニュアルは英語なので、日本語訳がてらメモを残そう、ということです。 (後の自分のためにもなるからね) 結構DeepLの直訳です。早いからね。 【目的】 ・Boss Roomをインストールして、色々触ってみる、動かしてみる。 ・最終的には2Dのゲームを作りたいので、2Dのゲームに移行できるように、  マルチプレイヤー・ネットワーク関連の動作の原理を理解する。 (・せっかくなので3Dのマルチのゲームを作れるようにもなりたい) 【前提】 ・windows環境 ・Unityそのものの使い方はちょっと知っている  (私は2Dのパズルゲームを一つリリースしている程度なので、大した経験はない) (・PUN2は使ったことがある) 【Boss Room Overview Boss Roomの概要】 Boss Roomは、キャラクタの能力、遅延を見えなくするためのキャスティング・アニメーション、複製オブジェクト、RPC、Relay、Lobby、Authenticationサービスとの統合など、マルチプレイヤー・ゲーム・フローの背後にあるコンセプトやパターンを探求するのに役立つように設計されています。 このプロジェクトは、あなた自身のUnityゲームのための参考出発点として使用することも、要素を個別に使用することもできます。 【Getting the project Boss Roomの始め方】 Git からダウンロードして使います。私はDirect Downloadのところに書いている通り、Code ButtonからDownkiad Zipでダウンロードしました。Zipを解凍(展開)して、Unityの他のゲームプロジェクトと同じ場所に移動します。 【Opening the project for the first time Boss Roomを最初に開く時】 プロジェクトをダウンロードしたら、以下のステップに従ってプ...

Boss Room, multiplayer games in Unity

今まではPhotonのnetwork serviceを使っていたのですが、2次元モンハンライクゲームを作りたいという野望が出てきたので、本格的なネットワークサービスを勉強するべきだという結論に至りました。やはり公式が用意しているサービスを利用するのが良いのかなと思い、調べたところ、 Boss Room というものがありました。これは3Dですが、ネットワーク機能、特にロビー機能なども一緒に入っているので、これをマルパクリして2Dゲームにしたいと思います。(公式もこれを使ってゲーム作ってねと言っている)

【TopDown Engine】見下ろし2Dアクションゲームのためのアセット

アクションゲームを作りたいなーと思いました。 3Dは難しそうなので2Dのアクションを作りましょう。 となると横スクロールかゼルダのような見下ろし型の2Dアクションになりますが、見下ろし型が大好きなので、こちらを作りたい。 パズルゲームのように最初から作るのは大変なので、アセットを使って作るのが良いだろうと思い、調べたところ、TopDown Engineというアセットが有名なようです。 TopDown Engine 執筆時点(2024/2/17)で$82.50~12,400円です。たけぇ。 セールで安くなったら買いたい! ちなみに、youtubeで「Unity 見下ろしアクション」と検索しても、あまり情報は出てこなくて、RPGの作り方の動画が少しあるだけでした。TopDown Engineを改変して見下ろし型アクションゲームを作る方法を動画にすると需要ありそう。

ハイパーロボットの解法のアプリ上での実装についてのメモ2

 前の投稿 の続きです。 直進パズルオンライン のシングルプレイに答えを表示させる機能を付けました。 【簡単なアルゴリズム説明】 【実装中で苦労したこと】 【他のアプリとの違い】 を残しておきます。 【簡単なアルゴリズム説明】 1.準備 まず、壁の配位、コマの配位を管理する変数(配列を)用意する。壁の配位は一回ステージが決まれば不変ですが、コマの配位は1手動かしたら変わるので、別の変数(配列)に用意しておきます。また、あるコマをある方向に一手動かし、動かした先のコマの配位を保存できるようなプログラムも作っておきます。 2.一筆書きでゴールできるか判定するプログラムを作る ゴール対象コマを動かして、一筆書きでゴールまで到達できるかを判定するプログラムをまず作ります。ゴールの位置が決まればゴール対象コマも決まり、コマたちの初期位置C[手数=0]から考えて、ゴール対象コマが動ける方向を元に、1手動かして実現できる配位C[手数=1]が決まります。C[n]から動ける方向をそれぞれに対して探し、C[n+1]を作っていくと、(あれば)ゴールできる手順が見つかります。これだけでも体感で1/2くらいの確率でゴールできる手順が見つかります。もちろんこれが最短とは限りません。実現される配位C[n]の大きさはそこまで大きくなく、C[n]からC[n+1]は最大でも3倍にしかならないからです。というのも、まず動ける方向が原理的に4方向が最大で、壁の方向には動けない&来た方向には戻らない、という制限があるので、C[n+1]はC[n]の2,3倍程度の大きさしかありません。例えば2手ずつ増えるとして、10手先まで計算しようとすると、2の10乗=1024程度の計算量になりますが、これはそこまで大きくなく、この一筆書きプログラムは何回も呼んでもそこまで時間はかかりません。 3.総当たりでゴールできるプログラムを作る ゴール対象コマでやった方法を、全てのコマに対して行います。初期位置C[手数=0]から、1手動かして実現される配位C[手数=1]を作り、全て保存します。C[n]からC[n+1]を作る時も同じ方法で、おおよそ10倍くらい配位の数が増えていきます。というのも、例えば5コマある場合、1コマあたり2,3方向しか動けず、以前実現した配位はC[n+1]に入れないので、おおよそ10倍程度になります。...

ハイパーロボットの解法のアプリ上での実装についてのメモ

イメージ
ハイパーロボットの説明書には、 "Note: Most situations on the gameboard can be solved in less than 10 moves; but sometimes, a situation will arise that requires 20 or more moves." 「ほとんどの盤面は10手以下で解けます。ただし、時々20手以上かかるような盤面もあり得ます。」 とあります。ハイパーロボットや 直進パズルオンライン をやったことがある人はわかると思いますが、10手以下ばかりの解法を思いつき続けることはないと思います。(それができる人はすごく上手です!) 果たして本当にそうなのか、プログラムを書いてみました。日頃慣れているpythonで書いてみたところ、わりとすんなり動くものは作れました。基本的には総当たりで、なるべく効率よく解けるように実装しました。それで実際問題を解かせてみると、見事に10手以下の解がほとんどでした。すごい。 せっかく書いたし、 直進パズルオンライン にはシングルプレイがあるので、答えを表示できるようにして、答えを見るためにリワード広告を見る必要がある、という実装をしようとしてみたところ、unity editor上でさえ動きが止まってたまにフリーズしたりするので、スマホ上ならなおさら負荷が大きすぎてダメなのでは?と思い、一旦作業を中断しました。 ただ、google playには Ricochet Robot Solver というハイパーロボット(ricochet robot)の問題を解くアプリがあることを思い出しました。インストールして動かしてみたところ、google chrome上で動かしていると表示されました。更に、コードはgithub上にあると書いています。なので最初はスマホアプリ内で計算しているのではなく、どこかのサーバで計算して結果だけダウンロードしているのか?と思ったのですが、そうではないようです。(オフラインで起動しても解いてくれる)ということはスマホで十分計算できるということなので、私のunity上でのコーディングが間違っているか、私の考えているアルゴリズムが負荷が大きすぎるのか、ということになる気がするのですが、今はよくわかっていません。 ちょっと頭を冷...

unityroomでlocalizeパッケージが使えない、解決方法

多言語対応のために、unityのlocalizeパッケージを使って実装しました。それ自体は調べたらたくさん情報が出てきてその通りすればOKなのですが、unity editor/androidの実機上ではちゃんと多言語対応できたのですが、webGLでビルドしてunityroomにアップロードしたところ、No translation foundと出て表示がおかしくなってしまいました。色々調べたところ、 むじ様の記事 に原因・解決方法が書かれていました。ただ、私にはこの解決法は難しすぎたので、泥臭い方法で解決(?)しました。というのも、unityroomで遊ぶユーザは日本人しかいないという仮定のもと、localizeは諦めました。(storeに出すものはlocalizeしている) 私の場合、localizeのコンポーネント(LocalizeStringEvent)を付与しているのはすべてUIだったので、unity editorのcanvas上でLocalizeStringEventコンポーネントを持っているUIをshiftキーを押しながら選んでLocalizeStringEventを無効化しました。 他にも、localize関係の変数の読み込み部分はコメントアウトしました。 今回は3つのシーンがあったのですが、最初のシーンだけ上記の対応をするだけでおかしくなった表示は戻りました。 以上の対応をすることで、localizeする前の状態、つまり日本語だけのアプリがunityroom上で遊べました。

【Android, WebGL】Unity, PUN2でクロスプレイを実装する方法【iOSはわからない】

イメージ
PUN2(Photon Unity Networking 2) : を使ってオンライン機能をもったゲームをUnityで作る時に、android, webGL, iOSなど、異なるプラットフォーム同士でも同じ部屋でもちゃんと遊べるようにしたいですね。私の最初のゲーム「直進パズルオンライン」 google play (android) unityroom (webGL) でもそうしたのですが、そこで少し躓いたのでここにメモします。 【前提】 Unity ver. 2021.3.30f PUN2 ver. PUN: 2.40 Photon lib: 4.1.6.11 同じプラットフォームでの通信はOK 【最初にやったこと】 PUN2の設定項目を以下のようにしていました。 これでgoogle playに登録し、androidスマホ同士でオンライン対戦ができていました。ただし、この設定のままWebGL形式でビルドしてunityroomに登録したところ、android同士、WebGL(unityroom)同士では同じ部屋に入ってオンライン対戦できるのに、androidとWebGLのクロスプレイができませんでした。具体的には、同じ部屋に入ったつもりでも、互いに認識せず、違う部屋の判定になっているようでした。 【解決法】 PUN2の設定項目を以下のように変更しました。 通信ProtocolをUDPからWeb Socket Secure(WSS)に変更しました。そのうえでandroid/webGLでビルドし、それぞれgoogle play/unityroom双方に登録したところ、互いに通信ができました。ちなみに、Tcpではうまくいかなかったと思います。(WSSでも最初うまくいかないときがあった。原因は謎。)これでなぜ解決できたのかというとWebGL側にあって、 株式会社フレームシンセシス様 によると、” WebGLビルドでもそこそこいい感じに動く(ただしトランスポートにWebSocketが使用されTCP通信になる) ”とあり、少なくともudp通信はしないみたいです。(私はいまいち意味はわかっていない)そういうわけで、上記対応でうまくいきました。 android, WebGLとiOS間でも通信がうまくいくかどうかも気になるところですが、今Mac/iOSの開発環境がありませんので、調査で...

BloggerでAdmobのapp-ads.txtを設定する方法

UnityでGoogle AdMobのapp-ads.txtを設定した方が良いみたいです。不正防止のためらしく、しない理由がありません。 Bloggerを見つけるまではGoogle Sitesを使っていたのですが、私の(超低い)技術力ではapp-ads.txtをサイトに置く方法がわかりませんでした。しかし参考ページによると、Bloggerではhttps://<自分のドメイン>/ads.txt を編集できる機能とリダイレクト機能があるので、https://<自分のドメイン>/app-ads.txtをhttps://<自分のドメイン>/ads.txtにリダイレクトすれば万事OKというわけです。 参考: HAL-JP開発者ブログ 様