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

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

Unity

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…

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

ゲームを作っていて、敵の攻撃やこちらの照準の動きなどは今まで通りで、それとは独立して画面の一部で1秒ごとに1から20までカウントアップしてそのカウントを表示したいとしましょう。よくあるケースです。特別の攻撃で「20秒間しか使えません」みたいな。…

ゲーム完成、アプリのバックグラウンド問題、時刻の精度の問題

さっき、できあがったゲームをGoogleに送りました。1週間?かそのくらい、審査があるそうです。通ればそのまま公開です。こんなかんじです↓ アイコンはこれ↓ 動画にしてみました。 youtu.be アプリ作成中、何日かに1回は何か問題が起こっていました。最後の2…

UnityでUI上でタップ(複数箇所でもO.K.)された位置の検出をする

タップ情報を取得し、UIがタップされた位置をUI上のローカル座標で取得します。前、UI上のローカル座標は取得しましたが、タップが1ヶ所だけ、の前提でした。今回のやり方は複数ヶ所のタップに対応しています。 www.omoshiro-suugaku.com 例によって短いコー…

Unityで作ったゲームはバックグラウンドに回ったとき動いていないのか?

念のために確認しました。ゲームをやっていてふと天気予報が気になって確認したとします。アンドロイドなら画面の一番下のホームキーや動いているアプリを一覧できるキー(名前は知りません)を押して天気予報のアプリを実行、ということになるでしょう。ま…

タップされた位置のスクリーン座標からUl(Panelなど)上の座標を得る

UI部品のどの辺をタップされたのか調べる方法を書きます。ゲーム画面にPanelを配置しました。写真の薄い赤の部分がPanelです。 このPanelのどの辺がタップされたのか、検出したいことがあります。照準のコントロールに使うため、正方形のどの辺を押されたか…

Unityで空間内にCanvas、RawImageで爆発シーンを描画する!

シューティングゲーム作成中です。爆発シーンの描画を今まではパーティクルでやっていましたが、スマホだと処理が追いつかなそうなのでやり方を変える、といった話を書きました。 www.omoshiro-suugaku.com 爆発アニメーション用の画像を用意します。ぼくは…

UnityでRawImageを使って爆発シーンを表示する

前回、Unityのパーティクルを使わずに爆発シーンを描画、という話を書きました。 www.omoshiro-suugaku.com うーん、まあ一応できたんですが、絵が汚い……。パーティクルを使った爆発シーンを録画して必要な部分を切り取って背景が透過するようにして、Quadに…

Unityで、オブジェクトに動的にマテリアルを設定する

作成中のシューティングゲーム、「これは解決しとかなきゃまずいだろ……」という問題が。PCで実行するときは大丈夫なのですが、実機(スマホ)だと場面によってはFPS(1秒間に描画する回数)が10台になってしまいます。人間が見たとき、30を切っていると動き…

UnityでUIにピンチイン、ピンチアウトを実装する

前回、UIをドラッグするコードを紹介しました。UIとしてはPanelを相手にしていますが、他でも同じだと思います。 www.omoshiro-suugaku.com 今回はそれに続けて、Panelにピンチイン、ピンチアウトを実装します。ピンチインとは2本の指で画面の一部をつまむよ…

UnityでUIオブジェクト(PanelやImageなど)をドラッグする

作成中のゲームに簡単なヘルプ(遊び方の説明)をつける予定です。ある程度の量になってしまいます。スマホアプリですから画面は小さいので、大きなヘルプ画面をドラッグして見たい部分を見られるようにします。要するにスマホでサイトを見るような感じにし…

ランキング機能をPlayfabで実装しました。Guidについても少し。

この連休でランキングの機能を実装しました。重複しますが一応、ランキングについて簡単に書いておきましょう。 スマホのゲームではスコアランキングを表示できるものがあります。自分のスコアランキングではなく、そのゲームのやっている人たち全員のランキ…

ニフクラのNCMBでランキング機能を実装するのを諦めました……

せっかくシューティングゲームを作るのだから、ランキング機能を入れたい!と思っていろいろ調べ、GoogleのFirebaseか、ニフクラのNCMBかで検討し、NCMBに決めて導入しました。ランキング機能というのは……同じゲームをユーザーの皆さんがあっちでもこっちで…

Unityで非アクティブなUIオブジェクトを取得する

すみません、タイトルは少し意味が取りづらいかも。ボタンをクリックするとUIのパネル(Panel)に作っておいたランキング表が表示されるようにしようと思いました。 最初は非アクティブ状態にしておきます。↓ こういう風に。 この状態からスクリプトでアクティ…

ハイスコアランキングの桁の位置合わせ

作成中のシューティングゲームにハイスコアランキングの機能を入れました。予定通り、ニフクラ(NCMB)を使わせてもらいました。アプリで出たスコアはアプリからニフクラへ送り、アプリは集まったスコアの上位20データを取得、一覧を表示します。ニフクラへ…

デリゲート、匿名メソッド、ラムダ式を分かりやすく説明する

やや分かりづらいところです。例によって最小限のコードで、限界まで分かりやすく説明しましょう。 デリゲートについては既に記事にしてあります。なるべく参照する必要のないように書きますが、少しでも「??」と思ったらお読みください。 www.omoshiro-su…

Unityで、変数の初期化時の値を変更しても反映されなかった話

開発作業していて、2時間ハマりました。うう……(涙)。皆さん、お気をつけください。 メインのクラスで変数 xxxx を定義し、同時に初期化しました。 public int xxxx = 1234; という感じです。他のクラスからも参照したかったので public をつけて宣言してい…

Unityでキャラクタを決まった軸の周りに回す

編隊を全滅させたとき「300」が現れ、クルクルッと回って加点、とやりたかったので試しました。板(3DオブジェクトのQuad)に「300」の絵を貼り付けます。その板を上下方向の軸の周りに回します。 ↑こんな感じです。動画でお見せしたいですが、ブログに動画…

Unityでスクリプトを使って線分を描く(3)(初心者向け)

3回目です。前回、以下のようにすれば何度コールしてもエラーを出さずに線分を描画できるということを明らかにしました。が、このままではまずいということが分かりました。 //1本目 GameObject g = new GameObject(); var rd = g.AddComponent<LineRenderer>(); var pos =</linerenderer>…

Unityでスクリプトを使って線分を描く(2)(初心者向け)

今回の目標は次のように空間内に線分を描くことです。 前回、次の絵のように1本だけ描くことには成功しています。 そのときのコードは次の通りでした(なお、点を追加すれば折れ線は簡単に描けます)。 var renderer = gameObject.AddComponent<LineRenderer>(); var pos =</linerenderer>…

Unityでスクリプトを使って線分を描く(初心者向け)

制作中のゲームで線分を描画したくてネットを調べ、実験して、分かったことをまとめます。 とにかく初心者には重要なポイントが分かりません。長いコードは見るだけで尻込みすることも。最短のコードで、単機能を実現する例を挙げてもらえれば凄くうれしいの…

Unityでスケジュールに従って敵キャラを生成する方法

Unityで、ある瞬間からの時間を測り、2秒後、6秒後、19秒後で特定の動作をさせたいとしましょう。例えば…… Time.realtimeSinceStartup でプログラム起動からの経過時間を測れますが、これの値が2秒、6秒、19秒のときに敵キャラを生成したい、などというケー…

(新)ベジェ曲線とは何か

空間の中を戦闘機を動かしましょう。普通に数学でやるように空間内の曲線の式を使ってもよいですが、式では表しにくい曲線もあります。 図を見てください。線分p0p1を8:2に内分する点、線分p1p2を8:2に内分する点、線分p2p3を8:2に内分する点をそれぞれp4、p…

Unityで左シフトキー、スペースキー、右方向キーを同時に認識できなかった話

Unityで、押されているキーを検出します。 Input.GetKey(KeyCode.LeftShift) (左シフトキー) Input.GetKey(KeyCode.RightArrow) (右方向キー) Input.GetKey(KeyCode.Space) (スペースキー) というコードで、押されているなら true、押されていないなら…