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

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

Unity

ゲームでステージが変わるとき、暗転する方法

ぼくはUnityで何かゲームを書くとき、「シーンの変更」というのをやったことがありません。実験で何回か試したことはありますが、実際のプログラムではステージの進行に伴うオブジェクトの処理(削除、新しいオブジェクトの生成など)など、全部自前です(要…

UnityでCinemachineのバーチャルカメラを使う(2)

⬇この記事の続きです。 www.omoshiro-suugaku.com 上の記事を書いた段階ではバーチャルカメラのAimパラメータの働きがどうもよく分かりませんでした。Aimは「カメラをオブジェクトに向ける」働きがあるということですが、それだけでは説明になってない感じが…

2Dシューティングゲーム「InuoShooting」公開しました

ゲームを書くのも久しぶり……というわけでリハビリのつもりでプログラミングしていました。ようやく1本できあがったので公開。 unityroom.com ブラウザゲームを投稿できるサイト、unityroomです。 当初はスマホで動くゲームにしようと思っていましたが、予定…

クエリちゃん、走った!

前の記事で書いたクエリちゃんが走りました。 今まではまったく使っていなかった、3Dのキャラクタのアニメーションをやってみました。テキストは前の記事でも書いたこれ。 作って学べる Unity本格入門[Unity 2023対応版] 作者:賀好 昭仁 技術評論社 Amazon…

Unityで3Dのキャラクタを使ってみる

とりあえず2Dのゲームは書けたので今度は3Dを……と考え、本を購入しました。3Dのキャラクタを扱う本は持っていましたが、一応、新しい方がいいかと思ってあらためて手に入れました。 作って学べる Unity本格入門 [Unity 2023対応版] 作者:賀好 昭仁 技術評…

UnityでCinemachineのバーチャルカメラを使う

バーチャルカメラというのを使ってみました。ゲームで、例えば主人公が動くのを後ろからカメラが追いかけ、立ち止まるとカメラがビューンと動いて(背景もダイナミックに変化!)正面からアップに……みたいな演出がありますよね。いわゆる「カメラワーク」と…

3つのキーの押下を検知できなかった話

押下は「おうか」と読むそうな。多分そうだろうと何となく考えていましたが、今回調べてはっきりしました。いや、本題はそこではなくて……スペース、矢印(右)、矢印(上)が同時に押されていることを確認しようとしましたがうまくいきません。2つしか検知でき…

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…

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…

画像ファイル名を指定してスクリプトから読み、画像を表示する方法(2)

前回はプロジェクトのAssetフォルダ内のResourcesフォルダに入っている画像ファイル(png)をImageに表示する方法について書きました。でも、ゲームなどではプログラマが用意した画像を表示できれば大抵よいのでそれで十分かも知れませんが、一般のアプリで…

画像ファイル名を指定してスクリプトから読み、画像を表示する方法

またしてもハマったので記録しておきます。スクリプトから画像ファイル名を指定して、Imageに表示する方法です。 Canvasの下に「Image100」が配置されているとします。このImage100に画像ファイル「Inuosann.png」を表示するとします。この画像ファイルは、A…

Unityで、RawImageを空間内の好きな位置に表示する

RawImageを空間内の好きな位置に表示する方法をまとめておきます。このブログ内で何となくあちこちに散らばって書いてあって使いづらいので。 下の画像を空間内の任意の位置に配置して表示します。 準備① 画像はpngで、背景(犬の輪郭の外側)は透過にしてお…

Unityでコルーチンを使ってみる(2)

前回の続きです。コルーチンの使い方をまとめます。(使用例4)5秒経ったら何かする StartCoroutine(wait5()); …… IEnumerator wait5() { Debug.Log("●●●"); yield return new WaitForSeconds(5f); //(A) Debug.Log("●●●5秒経ったよ"); } StartCoroutine(wai…