動画1本でゲーム完成9 シューティング 東パソ非公式Unity独断補足解説 放送第59,60,71,76,77回分make tiny games9

東パソ非公式Unity独断補足解説

恐縮ですが、テレビ東京放送(BSテレ東)制作の2025年春 まで放送された「東京パソコンクラブ〜プログラミング女子のゼロからゲーム作り〜」のunityのパートについての考察をはじめました。非公式であります。

放送当時のUnityのバージョンと現在普及しているバージョンの違いがあって、多少放送時のプログラムソースの記述が異なるものも登場することがあります。

第48回21分43秒とか時間の紹介がありますが、放送をご覧になる環境によって多少ズレるので、参考程度にお聞きください。

(4-009)

テレビ番組「東京パソコンクラブ」で紹介されたUnityによるシューティングゲーム制作の過程を、非公式に補足・解説したものです。番組放送時と現在のソフトウェアバージョンの違いを踏まえ、当たり判定のロジックやリスト管理といったプログラミングの核心部分を独自の視点で詳しく解き明かしています。自機の作成から敵の出現、さらには音響効果や背景演出といった仕上げの工程までが、具体的なソースコードの解説とともに体系的にまとめられています。開発者が直面しやすい技術的な疑問点に対し、AIとの対話や独自の検証を通じて実用的な解決策を提示しているのが特徴です。最終的には、ゲームを形にするためのインスペクター設定やスクリプトの全容を網羅し、学習者が実際に動くゲームを完成させるための実践的なガイドとなっています。

今回はとなった第59回から第60回の中西アルノさんがゲストとなったアスレチックの回、そしてファミコンのスターソルジャー(ハドソン)をプレイしてからのシューティング内容ですね。

あと、林さんが復帰してからのシューティング

第71回豊洲の肉カフェ・モンスタービーフ、オリジナルゲーム「#デンパトウ」発売からのシューティングを改良する回。

第76回は下北沢でカレーをいただく・・・からの当たり判定の学習回

第77回は下北沢ヴィレヴァン王決定戦・・・からのゲームに音を加えるなどのシューティング完成回です。

公式ではご覧の2023年から2024年の放送回です。

59回 2023年9月29日放送

60回 2023年10月6日放送

71回 2024年1月26日放送

76回 2024年3月8日放送

77回 2024年3月15日放送

まあ、まとめて「シューティング」ですね。

それで、いろいろ内容を検討した結果、第76回の当たり判定の学習回・・・シューティングゲームの当たり判定の学習の回は、他の回と流れが異なる点が多いことから、この動画ではこの当たり判定の話を先に紹介することにして、次のように分けました。

1.シューティングゲームの当たり判定 (第76回)

2.自機の作成(第59回)

3.敵を加える(第60回)

4.シューティングの完成まで(第71回、第77回)

5.袋とじ(無料作曲AIと無料シンセサイザー)

1. シューティングゲームの当たり判定 (第76回)

76回8分46秒

当たり判定とは?と小林先生が質問をしていると、あやてぃーさんが「右の物体に当たり判定をつけて左の物体をぶつけるとぶつかる。当たり判定をつけないとすり抜ける」と正解をだしていましたぜ。あと、「アイテムを取る」「壁にぶつかる」という小林先生の意見や「地面と天井をつける」という弓木さんの意見がありました。

第76回10分39秒では、

当たり判定というのは、実は2種類あって、これまでの知識であるRigidbodyを付けてColliderで判定、というやり方がひとつ。もう一つがこれから行うプログラミングで行う方法である、という話があった。なぜ、今回はプログラミングで行う必要があるのかというと、

今後このシリーズで取り扱う予定の「わたげくん」の場合、あるいは、「ぴよキャッチ」とかのゲームを例にあげると、プレイヤーが一人の場合で、ヒエラルキーにあるオブジェクトと単純に比較するのならば、さっきのRigidbodyを付けてColliderで判定、というやり方で済むのだが、シューティングゲームの場合には、「敵はいつでてくるかわからない」「弾もプレイヤーがいつ出すかわからない」従って、プレイヤーと弾と敵との関係については、単純な当たり判定を採用できない、という問題が生じる。シューティングゲームなりの処理方法で当たり判定をおこなう必要がある、とのことである。

具体的には第76回11分45秒からの小林先生の説明で「敵の出現時にその敵を「敵のリスト」に入れて、その中で判定を行う」ということが、当たり判定の2種類のうちの2つ目のプログラミングでの方法、ということでありまして、

さっそく、その実験として、おにぎりを主人公にした実験プログラムで再現、ということになります。すでにこのおにぎりは、矢印キーで移動可能となっています。

これがOplayer.csで、まだキー入力で、移動だけ。RactTranceformだけどTranceformにアタッチ。

本放送では上下左右のキーで移動する、という仕様でしたが、いずれシューティングにした際に自由にキー配置することの話もあり、また自機の移動は左手にすることが多いこともあり、この動画では、ここで大幅にキーの仕様を変更することとしました。

Ver.6での仕様に変更があり、GetKey命令はKeybord.current.キー名.isPressedとなっています。

プレイヤーの移動を、一部マニアでは知られるところのWASD(上W、左A、右D、下S)にします。これが有名であることは、このサイトを参照してください。

なぜPCゲームの移動は「WASD」?理由や操作性を向上させるポイントを解説|BCN eスポーツ部 – ユース世代のeスポーツを応援するニュースサイト
PCゲームを初めてプレーするときは、手元のマウスとキーボードをそのまま使う人が多いのではないでしょうか。初めてキーボードを使ってゲームをプレーし、移動操作の難しさの壁にぶつかるのはよくあるケースです。多くのPCゲームにおいて、キャラクターの…

第76回12分30秒

ここで、Oplayer.csとは別に、新たにEnemy.csとして作成。

static List<Enemy>

staticなのは、この「敵」を全て同じパラメータで扱うため。一括管理のためにstatic型で宣言する。という話が小林先生からされた。ちなみにenemyListをOplayer.csも参照するので、本編では紹介されていないが、ここは先頭はpublicにしておかないとOplayer.csの中のenemyListは参照できないとエラーがでるので、ここは先頭はpublicを入れてね。

List命令を使うには2行目に「using System.CollectionsGeneric;」を入力して使えるようにしておく。

第76回13分43秒

「リストに敵を入れる仕組みと出す仕組み」というのは、リストに敵を登録したり、リストから消したりすることだな。リストに入れたり、リストから外すともいうよね。

Awake。これはStartと意味はほぼ同じだが、Start命令よりも早く実行される。「Objectが画面に作られた瞬間に実行」と小林先生の解説がありました。

第76回14分10秒

 EnemyList.Add(this); Awake命令、つまり実行直後にthisつまり「これ」。Unityにおいて「this」は自分自身のことなんだ。だから、「実行された直後に自分自身をリストに入れる」というのが、Awake命令の中に書き込んだenemyList.Add(this);ということだなんだな。

 そして、この下にOneDestroy命令だね。OneDestroyは消えた瞬間に実行される命令なんです。

第76回14分34秒ここで

「消えた」というのは、敵に倒されて消されたり、画面外に出たときに実行・・・という説明が佐藤璃果さんのナレーションがされましたが、ここでのOndestroyはEnemy.csなので、プレイヤーの弾に破壊された時や、敵が画面外に流れた際のことを示していますね。

そうすると、リストを外す命令がここに入力することになりますので、リストから外すにはRemove命令を使います。

第76回15分20秒

シューティングゲームにおける敵だけに話が終わるのではなく、アクションゲームの床や壁にも、このリストの管理は応用される。

このAwake~AddとOndestroy~Removeは定型として頻繁に使うので覚えておこう。

第76回15分44秒

いよいよ当たり判定の話になる。

Player(ここではOplayer)から判定が呼ばれてくるので、public(おおやけ)つまり各csなどのコンポーネントと共通して扱うのでpublicで宣言をする。

そして判定にはtrueかfalseで返事がされるので型はbool型を使用する。

当たり判定の名称は自由なので、放送時のIsHitという名称を仮に設定する。

第76回17分21秒

今回はおにぎりの中心点と敵の外周という話になる。つまり円の中心点と半径がデータとして必要である、ということだ。

中心点はpositionで取れる。

変数名は、本編ではプレイヤーのポジションなのでpPosとなっていた。本編ではVector2を採用していたが、この動画ではVer.6などの諸事情でVector3を採用します。

そしてメンバ変数として敵の当たり判定の半径rを宣言しておきます。

第76回18分50秒

当たり判定が発生する時の処理について

ベクトル (x, y, z) の magnitude は、「三平方の定理」で距離を求めています。Unity が内部でこれを計算してくれているわけです。

第76回20分00秒

Oplayer.csでenemyListの中にいる敵をeという名前で処置にかける。

敵に当たったらHITのログを表示させる。

第76回20分44秒

敵のTransform(RectTransform)をアタッチして完成

それで・・・・小林先生の画面というかヒエラルキーの画面が見えるんですが、どうもCanvasを使っていない様に見えるんだよね。前回もRectTransformとTransformの問題があったけど、今回はOplayer.csやEnemy.cs の_tであるTransform型のアタッチのところはRectTransformをアタッチしても問題は無かったんです。本編ではTransformとなっているが、この動画ではRectTransformを使用している。つまり、画像であるおにぎりや敵の円は画像を専門に扱うCanvasの中のImageコンポーネントから画像を扱う方が便利で、本編の様なCanvasを使わずに?(実は使っているかもしれないが、本編では使っていない様に見える)本編の内容の完全再現はここでは難しかったので、今回はCanvasを使用した形での当たり判定のプログラムとなっています。

・敵一体でHITがでるか検証

・敵を増やして検証

・一体の半径を大きくして検証

今回の内容はここまで

enemyListの中身って表示されていなんだけど・・・そうだな。内部処理という感じなので、具体的に「ああ、この敵が今リストされているな」という様な表示は今回はプログラミングされていないので、みなさんは表示されていないenemyListを想像して理解するしかないけどな。まあ、プログラムを短めにしたり放送時間が短いとこういうことにもなるけど、このコーナーはとりあえずここで終わりとするよ。

Oplayer.cs

Oplayerのインスペクター

この時点でのEnemy.cs

この時点でのEnemyのインスペクター

2.自機の作成(第59回)

このコーナーでは、第59回のシューティングの作成の初回から、自機を動かして、自機から弾を撃つまでを解説します。

第59回17分47秒です。

画面サイズを1920×1080に設定

縦スクロールのシューティングを作ろうとしているので、スクロールとして準備するのに

2倍の縦サイズを設定する。そう考えると、Main Cameraは縦を半分で設定するとスクロールがうまくいく、ということです。

画面の縦の1080に対してMain Cameraの縦のサイズを540に設定する。

これで基本設定は完了!

第59回18分5秒。

キャラクターの設定をしていく。

Hierarchyを右クリックしてCreate Empty

Game Objectと名前を決められるようになっているので、ここを本編ではPlayer、この動画ではShootingのプレイヤーなのでSplayerとしておく。

Splayerのポジションが人によってずれている可能性がある。XYZ全て0にする。

これで自機の画像が真ん中にきます。自機は戦闘機に設定しておきます。

第59回19分23秒。

ここでうp主が少し驚く。

Canvasを使わずに画像を紐づける動作として、

Assetsの画像から直接HierarcyにあるSplayerにドラッグ&ドロップすれば紐づくということを今頃になって理解するという・・・まあ、そういうことで、先程のおにぎりのところでも同じようにすればよかったのかな?というのをここで理解するんです。JPG形式の場合は背景が白くなってしまうのでおすすめできません。画像はPNG形式の方が背景が透明な場合に透明に反映されるのでおすすめです。

画像を4倍にする

そして、ここでAssetsでCreate>MonoBehaviorから名前をSplayerにしてSplayer.csを作る。そして先程のOplayer.csをコピーして、public class OplayerのPlayerをSplayerに変更する。

Trancsformをアタッチする。

スピードの変数spdはとりあえず100にする。

これでさっきのおにぎりのように動く。

第59回23分46秒。

Create Emptyを作成して弾の画像をひもづける

名前はBullet

プレイヤーと同じように画像をBulletにドラッグ&ドロップ。

第59回24分8秒。

レイヤーは画像の奥行きの設定項目です。数が少ないほど奥へ描かれます。

レイヤーの設定で、プレイヤーは0のままで、弾はー1にすることにより、プレイヤーより弾は奥に描かれるようにする。

そして、弾を動かすには

Bullet.csを作成します。

Oplayer.csからSplayer.csを複製して作ったように、Splayer.csからBullet.csをコピーして、public class SplayerのSplayerをBulletに変更する。

そして、if文を外して無条件で上に向かう様に設定する。

弾のTransformをアタッチする。

自機の方のSplayer.csでは、発射の命令と、弾丸Bulletのオブジェクトの使用による紐づけとしてBulletオブジェクトのアタッチをしておく。

Bulletのオブジェクトの作業です。それで、画像を8倍とかにして、調整します。BulletオブジェクトはAsettsにドラッグしてプレハブ化しておきます。オブジェクトに残しておくと最初から弾丸が表示されたままになるので、オブジェクトから消しておきます。必ずプレハブ化してから消さないと、全てを消してしまうことになるので、プレハブ化して、Asstetsにあるのを確認してから消して下さい。

実行すると、弾が一発上に向かうだけだが、プレイヤーから弾が発射されたようにみせることができた。スピードの設定も100でいいかどうか検討してみよう。

本編では好きなキャラクターに変更して放送されていました。

ということで、これで第59回の内容はおしまい。

3.敵を加える(第60回)

第60回13分7秒。

プレイヤーが弾を撃つ処理

ここで小林先生が、「撃つボタンはマウスで」という話が出たので、とりあえず本編通り話を進めるぜ。

Splayer.csで、Bulletの位置情報を共有したいので

public GameObject Bullet; を追加。

キー操作の下に

If(Input.GetMouseButtonDown(0))

あと、KeyもGetKeyでなくGetKeyDownに変更した方が良いという話がでました。

GetKeyは押されている間判定しつづけているのに対し、GetKeyDownは押されている瞬間に1回だけ判定が行われる、ということだ。

ちなみにこの話は本動画でのVer6用の命令については「isPressed」に相当するものと思うが、押しっぱなしでも操作に不便がないことと、もはやGetKeyとGetKeyDownを変更して比較してお見せすることが実際にはできないことから、ここは話だけでとどめておきます。

第60回18分8秒。

弾をImstatiate命令で複製し、その弾の位置をプレイヤーに合わせる。

GameObject obj = Instantiate(bullet);

obj.transeform.positon = _t.position;

bulletはあらかじめプレハブでなくてはいけない。

まずbulletのオブジェクトを一旦Assetsへ。

そして再びHierarchyへ。

プレハブ化したbulletをアタッチ。

実行すると

マウスを左クリックすると弾が無限大に発射される・・・はず。なんかエラーが出た。

Copilotにきくと、またVer6の影響であるということで、変更部分が

If(Input.GetMouseButtonDown(0))

If(Mouse.current.leftButton.wasPressedThisFrame)

ということなので、変更したらエラーは無いが、

今度はUnityのデフォルト仕様なのか、左クリックを押すと強制終了となった。

そして、弾の発射はEnterにしました。

弾のプレハブがうまくいかないこともあったが、ここはいろいろ修正して

これがうまくいった様子。

第60回18分23秒。

「このままだと弾が無限に複製される」ということなので、

弾が自動的に消える処理を追加

本編と違って弾が完全に消えずにHierarchyに残るということが生じているが、▶マークが消えているので、とりあえずこの時点では弾が無事発射されたということで・・・

第60回21分40秒。

ここは大問題ですね。

「敵はあらかじめ作ってある」

という視聴者泣かせの省いた工程ですが・・・・

さて・・・・

ゆっくり敵は調整して作っていくとして、

とりあえず第60回の解説を終わらせましょう。

まず、何のことかわからない状態ですが、

第60回24分34秒

Enemy.csの下の方で次の行を追加して敵のエネルギー、つまり耐久できる弾の数の関数や命令を追加する

 Enemy e = Enemy.GetHit(_t.position);

 if(e != null)

{

e.bomb();

Gameobject.Destroy(this.gameObject);

}

これは、Enemy.GetHitという関数を新たに作っていく・・・という話だったのですが、うp主の力不足で、AIと相談していく中で消えていったのでした。

まあ、似たような処理で敵の体力を示す変数hpをうp主さんは使っていますけど・・・このあたりは完成後の全体のソースをご覧になって検証してください。

・・・・ということで、

これから本編で省略されている作業を行うことになる。

まず、敵だな。

うp主が現在の知識で可能だと思える作業を積み重ねて、なんとかシューティングに近づけていく。

(1)敵を1体だけ配置する。

最初のコーナーのマルの敵を置く。

今回はCanvasを使わずに作成していくので、

このように空のオブジェクトから、今回はEnmey1という名前にする。

(2)Updateでとりあえず勝手に下がっていくこととして、

y座標で-540以下ならばDestroyで消える。

(3)プレイヤーにあった“HIT”のログを“敵と接触!”にする。

(4)敵と接触したら、プレイヤーを赤色にする。

敵は、最初は灰色にして、被弾を受けたら白になる。

(5)敵の画像をUFOにして、当たり判定を調整。2体に複製。

(6)ゲームオーバーの処理(文字と動作停止。ゲームオーバーの文字とプレイヤーを動けなくする。)

(7)画面の敵が全て消えたら背景を白にする。

背景を白くする、というところは

第60回25分15秒での

if(Enemy.IsallDestroyed())

{

           Camera.main.backGroundColor = Color.white;

           this.enabled = false;

}

でも、これですね。バックグラウンド、メインカメラの一番下のレイヤーですね。そこを今、白くしようとしています。それで・・・この後うp主さんが宇宙の背景を加える時にこのバックグラウンドが見えなくなるんですよね。なので、ここはさらっと紹介だけにします。解決方法はいろいろ方法はあります。とにかくこの部分は、最後は別に画像のオブジェクトと加えることにより赤くしたり白くしたりしているので、また変更がされています。

ここまでで、大体内容は網羅しているので、第60回の内容を終えるとするよ。

4.シューティングの完成まで(第71回、第77回)

さて、第71回では、これまでのシューティングゲームを改良していく、という回なのですが、改良前からの仕様なのか、インベーダーゲームの様に敵が画面の最下に触れただけで「地球侵略」ということでゲームオーバーだったんですね。これはかなり難易度があがるぜ。登場した敵は全て撃ち落さなければならないぜ。

ちなみにこの放送回でも用意されているEnemy.csですが、今回も放送を観ていた側からすると全くのブラックボックスだったよ。Spawn Timeとかはなんとかなりそうですが、行動パターンの種類とかはこの動画での解説は不明な点が多くて解説は無理ですね。Imagesは画像でしょうけど用意するのも大変かもしれない・・・Pf Bombは爆発の画像らしいです。最初は敵からの攻撃部分かな?と、うp主さんは思ったけれど、本編で敵から爆弾を投げてくる描写がないんです。敵からの爆弾の攻撃ではない。敵が爆発したときの断末魔の絵柄ですね。これがPf Bombです。

そこで、第71回19分3秒で林さんとともに、ヒントとなる画面が映し出されているのですが、

この画面から限定して、

(1)Spawn Time

(2)XspeedとYspeed

(3)Pf Bomb→爆発の画像なので、Explosion Spriteに名称を変更します。

(4)それと、さっき述べた敵が最下段に到着するとゲームオーバーの仕様に変更ですね。

これくらいはなんとか再現してみることにします。

その前に注意点なのですが、敵のオブジェクトはプレハブにしておいて下さい。今、うp主はEnemy1の下にCircleというオブジェクトを作ってそこにコンポーネントを入れていますが、後で不都合が起きます。Enemyというオブジェクトだけにして、そこに全部コンポーネントをおいてプレハブにしてください。結局プレハブにするときは、原則として変更したい箇所があるプレハブのときは、単純な1つのオブジェクトだけにしておいてプレハブにすれば良い、ということですね。親子関係のあるような構造にすると、子の方のオブジェクトは全く変更できないプレハブになってしまいます。(画像はできそうだが、数値はロックがかかってしまった。)まあ、よくわからない、と思った方は、敵のオブジェクトをプレハブ化するときは親子無しで一つが好都合である・・・とおぼえておきましょう。

(1)Spawn Timeの再現。登場までの時間で、数値を大きくすると後から登場します。通常は、画面の外、(400くらい?)に登場させてからその後下方に移動する、という具合ですが、その登場時間も管理する、という具合ですね。

なんとかできました。

(2)敵の移動にY軸のみにSpdという速度の変数をを用いていたのですが、これをX軸の移動にXspeedの変数に変更。Y軸の移動にYspeedに変更します。

なんとかできました。

(3))敵の爆発の画像の追加です。Star(Exbomb).png

なんとかできました。

(4)敵が画面の最下に触れただけで「地球侵略」ということでゲームオーバー

まず、Enemy.csですね。敵を移動させた処理の後、座標が200を超えて下まで到達したら

StartCoroutine(Sgamemanager.instance.GameOverInvaded());を実行して、そのことによりSgamemanager.csの中のpublic IEnumerator GameOverInvaded()の中の処理が実行されるようになります。その中で

「StartCoroutine を呼ぶと、指定した IEnumerator メソッドが

Unity によって“コルーチン”として実行されます。

コルーチンは yield return を使って途中で止まったり再開したりできる、

Unity 特有の“時間を扱う関数”です。」

地球侵略の画像処理をすればよい、ということになります。自機のSplayer.csは特に何も処理しなくてもいいです。

なんとかできました。

第71回23分2秒

敵の体力についての解説がありました。

さっきのコーナーでもhpの話がチラッとでましたよね。

・・・・まあ、こちらでは・・・・こういうことで作成済みになっていますね。

ここのコーナーの第71回部分はここまで。

本編では敵の当たり判定の半径の調整とかの話になっています。

まあ、ここは解説はそんなにしなくても良さそうなので、最後に音の追加です。

第77回21分30秒

音の追加については次の4つで、効果音ラボさん提供のやーつですね。

効果音ラボ – 商用無料、報告不用の効果音素材をダウンロード
2,000音以上の音源を掲載したフリー効果音サイト。品質にこだわっており、テレビなどのプロの音響現場でも使われています。

(1)プレイヤーが敵を撃つ音    「えいっ!」.mp3

(2)敵に弾がヒットした音      「ぐああっ!」.mp3

(3)敵を倒した音           「やるじゃないか!」.mp3

(4)敵にやられた音          「負けました…」.mp3

(2)でPlayの代わりにPlayOneShotを採用している。音の重なりに強い。

(3)は(1)と同じPlayを採用。

(4)でSplayer.csの19~22行で音2つ。これが、インスペクターの上からの順に対応している。

AudioSource[] sources = GetComponents<AudioSource>();

shootAudio = sources[0];

damageAudio = sources[1];

ここからは本編とは関係ないけど完成までの仕上げ作業です。

(5)背景の追加

背景をBackSpaceという画像にしておくと、今までBackGroundを変更していた色の変更が見えなくなってしまいます。そこでBackSqureという白い四角い画像を手前に置いてそれを変更するようにしました。

これまでのBackGroundの色変更部分をBackSqureの色変更に命令を変更します。

なお、BackSqureは有効にしておかないと役目を果たさず、しかし、有効にするとゲームスタート時から真っ白で、宇宙が見えなくなってしまいます。そこで有効にしておきつつ、次の1行でゲーム開始時には透明になる命令を加えておきます。これで自然な演出が出来るようになります。

(6)BGMの追加

Sgamemanager.csの中で管理。Play On Awakeにチェックを入れて自動再生、Stopで停止。ちなみに、他の音については全部Play On Awakeのチェックをはずして無効にしておかないと勝手に鳴るので確認しておいてね。

最後に自機がいつまでもこの傾きなので、(7)X軸方向のキーの入力によってサイズをマイナス変換させて(?)・・・完成!

敵が当たった時に画像が白くなる演出が課題

ゲーム開始時になぜか敵を倒したような音が出る・・・というのが2つ目の課題

ちなみに乃木坂さんのゲームはここで↓

東京パソコンクラブ【乃木坂46×プログラミング】
「乃木坂46」×「ゲームプログラミング」!BSテレ東で毎週金曜24時OA出演は乃木坂46/吉田綾乃クリスティー/弓木奈於/林瑠奈!ナレーションは佐藤璃果!TVerなどで見逃し配信やっています!タグは #東京パソコンクラブ !

今回のスクリプトおよびインスペクター

Unityの場合、スクリプトのリストだけを完成させても変数や画像の関連付けなどが必要になります。今回はインスペクターの様子も同時に紹介しておきます。

MainCameraのインスペクター

Splayerのインスペクター

Splayer.cs

Splayerの子のインスペクター1

Splayerの子のインスペクター2

Sgamemanagerのインスペクター

Sgamemanager.cs

Sgamemanagerの中のSgameoverのインスペクター

Sgamemanagerの中のSgameover2のインスペクター

Bullet.cs

Bulletのインスペクター1

Bulletのインスペクター2

Bulletのインスペクター3

BackSpaceのインスペクター1

BackSpaceのインスペクター2

BackSquareのインスペクター

Enemy.cs

Enemyのインスペクター1

Enemyのインスペクター2

Enemyのインスペクター3

全Enemyのステータス

全Enemyの座標

音の管理情報

5.袋とじ(無料作曲AIと無料シンセサイザー)

この女性だれ?うp主は妻に歌わしてるんじゃないか?と思う方もいるかもしれませんが、違います。この女性はAIですね。AI(アイ)さんじゃないですよ。このAIはすごいですね。音楽生成AI、SUNOです。

Suno | AI Music Generator
Create stunning original music for free in seconds using our AI generator. Make your own masterpieces, share with friend…

実際、使ったことがある人はわかると思いますけど、一度に2曲作ったりしますが、数秒ですよね。作成時間が。しかも、無課金・・・あ・・・うp主のチャンネルでよくAIがでてくるけど。全部無課金ですからね。紹介しているAIはだれでも利用できるんじゃないかな。Google登録も・・・これも無料ですけどGoogleアカウントでサクサク利用できるAIばっかりですよね。

無課金AI使ってますね・・・このサムネの「AIになるべく頼らない」というのにもはや反しているのでは?

このサムネの「AIになるべく頼らない」という縛りみたいな話ですが、要は「Claude Code」とか課金がメインみたいな感じのAIエージェント、コードの学習をしなくてもプログラミングをAIが作成するのがメインみたいなものに頼らない・・・学習のために・・・というのが主軸です。でも、AIの性能がかなり高くなってきて、いずれこの話は次の次あたりの話でするつもりだ。

さっきのシューティングでの背景・・・無課金AIです。やっぱり無課金のAIでコードの学習と関係が無い、あるいは無課金の範囲でCopilotとかで相談するくらいならOK、みたいなのがこの動画シリーズのスタンスです。

話は脱線しましたが、歌詞の例「ひろじい、べーしっく、チャンネル。プログラミングからお遊びまで。課金が無いものを提供します。興味があったら登録していってね。いいね、していってね。ゆっくり、していってね。」

ちなみにSUNO最新Ver5.5では自分の声がボーカルとして登録できるらしいです(課金プランなので未確認)。

参考は youtube みのミュージック「AIが俺の声で曲作れるようになってんだけど、どうすんのこれ」

さて、細かい設定も録画しておけばよかったけれど、場所離れると消えちゃうんだよね。これ、この曲はこの設定で作ったというのを記憶できたらもっと便利なんだけど。課金ならできるのかな?

この曲の場合・・・・ 

スタイル・・・日本のバラード&テクノ。女性の低い声。だったかな?

その他のオプションを開いて・・・これを「女性」にして、あといじってないです。

この他、オリジナル曲や鼻歌をアップロードしてSUNOにアレンジしてもらうことを検証しました。

次に、無課金シンセサイザーVITALです。

Vital – Spectral Warping Wavetable Synth
Vital – Spectral Warping Wavetable Synth

以下の表はVITALでデフォルトの状態で扱える音色の一部です。

以上、今回の内容です。

コメント

タイトルとURLをコピーしました