いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

プログラミング

2Dシューティングゲーム公開準備中!

久々の更新です。職場が変わり、ドタバタしていました。やはり職場が変わるといろいろ分からないこともあり、特に最初は何が何だかわからず、疲れますよね。細かいことでは印刷機の使い方とか授業の教室の位置とか。ようやくあれこれ自然に動けるようになり…

アドバーチャ(Ad-Virtua)でアプリに広告を入れる

アドバーチャ(Ad-Virtua)というのを導入してみました。↓ ad-virtua.com 自作アプリに広告を入れられます。「①再生単価×②再生数×③再生完了率」で収益が決まるそう。ひろはす氏(https://www.youtube.com/watch?v=jyO9zpESSgo)の動画で見て「面白そう!」と…

Unityでサウンドファイル(mp3)の音量をファイル毎に変える方法

ゲームのBGMや効果音を自分で作れる人は限られています。ぼくにそういう能力はないので、ゲームを作るときは何とか調達しなければなりません。ありがたいことに色々なサイトからmp3などのサウンドファイルをダウンロードでき、ぼくはこれを使わせてもらって…

2Dシューティングゲームで立体っぽいキャラクタを使う

2Dシューティングゲームでも、主人公が立体に見える方がいい場合もあります。今回はモデリングなど大変な作業はせず、地味な努力で一応立体っぽい雰囲気を出す話です。あまりうまく撮れていませんが動画をどうぞ。 www.youtube.com ぬいぐるみを16方向から写…

Unityで、自作クラス内でコルーチンを呼ぶ

自分で作ったクラス(特に継承はしていない)の中でコルーチンを呼ぶ必要があり、試してみました。次のコードではエラーが出ます。 //---------------- class testclassA { public IEnumerator test1() { Coroutine cr; cr = StartCoroutine(test2());//① yi…

Unityでパーティクルを使ってシールドを表現する

2Dシューティングゲームで、例によってシールド(敵の弾を防ぐバリア)を考えていました。いかにも「シールド!!」という感じにしたくて、最初は丸い球のα値を変化させ、主人公を囲っていました。こんな感じ。 明るさが揺らぐようにしているので、写真より…

Unityで、スクリプトを編集後Sceneビューに移ってもコンパイルが始まらないようにしたい

前はあまり気にしていなかったんですが、なぜか今回の開発作業ではストレスになっていました。エディタはVisualStudioを使っていますが、スクリプトを編集後、シーンやヒエラルキーなどを見られる画面に移動するとコンパイルが始まってしまい、場合によって…

Unityで2Dのライトの明るさをスクリプトで変化させる

タイトルの通りです。今、2Dシューティングゲームを書いています。2Dでもライトが使えるそうで、ゲームに入れてみることに。こんな感じで、よさそうです! しかし、スクリプトから明るさを変化させたかったのですがなかなかうまくいかず、サイトもあちこち見…

Unityで、複数のコルーチンの終了を待機する

前回の続き、今回は複数のコルーチンの終了を待ちます。例えばBGMをフェードアウトしつつキャラクタのα値を0にジワジワ変化させ、音量もα値も0になってから何かをしたい、などというときに使えます。例によって最短のコードで説明します。まず、前回と同じく…

Unityで、コルーチンの終了を待って別のコルーチンを起動する

タイトルの通りです。ゲーム製作で、例えばキャラクタをコルーチンでどこかへ移動し、続いて別のコルーチンでα値を0に変えたい(透明にしたい)、などというときです。最も単純なコードで説明します。まずコルーチンを2つ、定義しておきます。単純に、それぞ…

Unityで、スクリーンをタップしてそこへキャラクタを移動させる

Unityで、スクリーンをタップしてそこへキャラクタを移動させる、などしたいことがあります。電車で、となりのおじさんがカラフルなたくさんの丸いボールの映ったスマホの画面を指でパーッと撫で、キラキラ光って多分それが得点になっている……というゲームを…

Unityで画像から画像データを取り出し、他の画像にコピーする

Unityで、オブジェクトの持っている画像データを他のオブジェクトにコピーしたいことがあります。シーンに配置した単なる画像(ビットマップなどの画像ファイル)にもUIのImageにもスプライトが含まれており、このスプライトに画像データが入っています(UI…

平面で5点を与え、その近くを順に通る曲線を描く

シューティングゲームなどで、敵機に図のような軌道を描かせたいときにどうしたらよいか、考えます。 これだけなら、適当な式を定義してそれに沿って移動させればできるかもしれません。ネットで「いろいろな曲線」などで検索してみてください。「バラ曲線」…

Excelで2つの範囲の内容が完全に一致しているか調べる

Excelの表で、価格×個数の総和を求めます。 方法はいくつもありますが、今回はこれ。 使っていないセルに上の式を入力します。価格の列と個数の列で、対応する値をかけています。そしてそれらを総和する、の意味です。……が、ここでENTERを押してもダメです。…

Unityで、パネルと(配置してある)ボタンのテキストのα値を同時に変える

パネルにボタンが配置してあるとします。ボタンはパネルの子になっています。何かの事情でこのパネルのα値を変えたいとします。以下のコードではうまくいきません(goはパネルのGameObject)。ボタンのテキストはそのままで、パネルの地だけが半透明になって…

Unityでゲームのスコアを表示する

次のように表示したいとします。先頭の”000”は色違いです。この"000"はなくてもいいとも言えますが、地味な色にすればいい感じ。実践では桁数を固定したいことが多いかも知れません。そのときは"00000000000"といった文字列からスコアの桁数を引き算した分の…

Unityでゲームオブジェクトが存在するか確認する方法

あまり見かけないなあ……と思った話です。ゲームオブジェクトがアクティブかどうか、ではありません。存在するかどうか、つまり削除されていないかどうかの確認です。 Unityで2Dシューティングを書いています。敵に0.1秒間隔くらいで弾を撃たせるのにコルーチ…

Unityで書いているゲームのFPSがだんだん下がった話。ミステリ関係の書籍紹介。

学校はようやく期末試験の期間に。まだ採点、成績処理があるけれど、正月にかけてある程度まとまった時間が取れるので開発作業に注力します。 今日はいくつか仕事しながらゲームを書いていました。目指す動作になっているか確認しながらプログラミングするん…

waveモジュールを使ってwavファイルのサウンドデータを逆順にする

前回の記事の続きです。wavファイルのサウンドデータを逆順に並べて保存するのですが、以下のPythonのwaveモジュールを使ったコードでできます。逆順に並べ替えているのは for i in range(buf.size): #bufの内容を逆転してbuf1へ格納 buf1[i] = buf[buf.size…

Unityでアセットバンドルを使わずにアセット(wavファイル)を暗号化する

Unityでアプリを書くときの、サウンドファイルの暗号化の方法です。少し前の記事で書いたように、最初ぼくはサウンドファイル、画像をアセットバンドルとして扱い、アセットバンドルを暗号化する方法でやってみたのですが、PCではうまく行きましたが実機(ス…

Unityのマップで、どのタイルと当たったのか判定する

前回紹介した、『たのしい2Dゲームの作り方 第2版』(STUDIO SHIN2023翔泳社)にひと通り目を通しました。スプライトなど、アセットはダウンロードして使わせてもらい、あれこれ実験をやりました。大変勉強になりました。 たのしい2Dゲームの作り方 第2版 Un…

さあ、次はプログラミング!

立体の復元実験もケリはつき(よくない結果でしたが……)、夏休みもそろそろ終わりです。次はまたアプリでも作るかな……と1週間くらい前から勉強を再開しました。本も購入。『たのしい2Dゲームの作り方 第2版』(STUDIO SHIN2023翔泳社)です。 たのしい2Dゲ…

写真からチェスボードを使って立体を復元(14)(手順のまとめ)

ここまでチェスボードを使ってカメラの校正をして写っている立体を復元する方法を説明してきました。長かったですし、毎回「なるほど!」と納得していたつもりでも、いざ「さあプログラミング!」というとき「あれ、何をすればいいんだっけ?」と必ずなりま…

写真からチェスボードを使って立体を復元(13)(2枚の写真から空間内の点の座標を求める)

ここまでで3枚の写真からカメラの内部パラメータAを求め、基礎行列Fを求め、基本行列Eを求め、回転行列R、平行移動ベクトルtを求めました。ここからは3枚のうちの2枚を使えば立体の頂点などの(空間内の)座標を計算できます。この部分を説明します。 …

写真からチェスボードを使って立体を復元(12)(基礎行列Fから回転行列R、平行移動ベクトルtを求める(2))

続きです。今回まででR、tが求まります。全体、『写真から作る3次元CG』に従っています。あちこち「あれ?」と躓いたところがあり、後で読んですぐ理解できるよう、かなり詳しく説明をつけておきました。1回引っかかったところは次回も必ず引っかかるもので…

写真からチェスボードを使って立体を復元(11)(基礎行列Fから回転行列R、平行移動ベクトルtを求める(1))

前回の記事でFが求まります。次に、このFからE、R、tを求めます。やはり結構大変です。 次回、Cを最小にして回転行列、平行移動のベクトルを実際に求めます。今回の記事は何回も紹介している『写真から作る3次元CG』によっています。 3次元コンピュータビジ…

写真からチェスボードを使って立体を復元(10)(8点法で2枚の写真から基礎行列Fを求める)

Fは成分が9個ですから、「9点法」が正しいのでは?……と思うかも知れませんが、エピポーラ方程式を見るとFの成分が全部2倍になっていても成立します。いろいろなテキストでこういった事情を「Fのスケールは任意」と表現しています。例えばFの右下の成分を1に…

写真からチェスボードを使って立体を復元(9)(座標変換について解説!)

ここで、ぼくがこの分野を勉強し始めて最も悩んだことのひとつ、座標変換について整理しておきます。式が明らかになっていても、落ち着いて考えると「このmはどこの座標で測ったものなんだっけ?」とか、「どちらの座標軸を動かしたと考えている?」とか、…

写真からチェスボードを使って立体を復元(8)(全体の流れを確認)

ここで少し休憩。写真からチェスボードを使って立体を復元(1)~(7)で一応、チェスボードの映り込んだ写真3枚から撮影に使ったカメラの内部パラメータ行列Aを求める方法を説明しました。初めてだと特に、「理屈は分かったけれど、じゃあ具体的に何をどう…

写真からチェスボードを使って立体を復元(7)

いよいよ次の連立方程式を解きます。 以上で定数倍の定数λも含め、変数が全て求まりました。参考にしているテキスト『写真から作る3次元CG』では結果は載っていますが、計算の過程は書いてありません。結構大変でした。なお、eがこの記事の結果とは一部違…