今回の内容は、初心者であるオジサンが、Unityをはじめるとどうなるか、東パソで紹介されたUnityでゲーム「ぴよキャッチ海賊版」を作れるかを検証する動画です。
(4-005)
恐縮ですが、テレビ東京放送(BSテレ東)制作の「東京パソコンクラブ〜プログラミング女子のゼロからゲーム作り〜」のunityのパートについての考察をはじめました。非公式であります。
(1)1個のリンゴをキャッチするまで
最初に画像を用意しなければなりません。それで、リンゴはKLING AIで作りました。
最近は作成するまでの流れが少し変わりましたね。トップ画面>創作ツール>AI画像で画面生成に移動できます。プロンプトも「apple」と打ち込んだだけで、それなりのリンゴの画像ができたのでそのまま採用しました。ペイントで左右反転させて、背景はPhoto Scape Xで削除しました。
ぴよの部分ですが、こちらはペイントで作成しました。作成当初は左向きと右向きの両方を用意したのですが、後にspriteRenderer.flipX = moveX < 0; (moveXは左に進行したら-1fが代入される)を採用すれば右向きの画像のみで作成できるということをCopilotが教えてくれたので採用しました。
次に、Unityを早速起動させようとすると、バージョンが古いのでセキュリティに問題があるとの指摘をうけました。更新作業ですね。こちらは指示に従って行いました。まあ、こういう作業もあるということでお知らせしておきます。将来的にはGetKeyやGetKeyDownが使えなくなるということでしょうか?まあ、こういう警告がありましたが、「将来的には新方式推奨」というところも気になるところではありますが、本編の放送に従うため、このまま続けます。
今回は画像の切り替えとジャンプが無いところ以外は前回の動画「アニメ初歩編」と同様です。床部分はWallのプレハブのサイズを引き延ばして作り、ぴよは無重力「GravityScaleは0」ですが、FreezRotationのZにチェックを入れて、
BoxCollider2Dこれはですね・・・床とぴよとの当たり判定にはつかっていませんね。今回はジャンプを使いませんから。Y軸の上下移動がありませんから床とぴよとの当たり判定は接触しつづける場面が続くので、判定を行っても作業の無駄ということになりますね。でもぴよとリンゴとの当たり判定でつかうので、そちらでBoxCollider2Dを使っています。
tag“Graund”を受け取ったらDestroyで消える、ということにします。Wallに“Graund”というタグを設定しておきます。
ぴよとりんごとの当り判定を行うためにも、りんごにも“Apple”というタグを設定しておきます。
難易度をさげるためにSpeedを5から50に上げます。
動画の14分25秒

(2)複数のリンゴを出現させる
この段階で文字と、実際のゲーム空間とが、すごい大きさも場所もずれていることに気づきました。
それで、プチコン4でもテキストとスプライトのレイヤーが異なって管理をしているという話がありましたよね。(ひろじいべーしっくch第六回「ランニング」)
スプライトのレイヤーがUnity上ではワールド空間
テキストのレイヤーがUI空間
といわれています。
UI空間のサイズをワールド空間にあわせた方がよいという決定打は、ワールド空間にのみRigidbodyやColiiderがつかえるということです。
CanvasのRender ModeをScreen Space Cameraにして、Render CameraにMain Cameraを設定することで調整しました。
背景色の変更としてMainCameraの環境SkyBoxのところから.mkv Solid Colorにしました。
さて、ここまでくると、あとは、第45回27分14秒に見えるこの命令です。
float x = Random.Range(-Screen.width/2+128, Screen.width/2-128);
obj.transform.localPosition = new Vector3(x ,Screen.height, U);
まずUというのがZ軸座標の任意の変数ですね。これは0f、つまり今回はゼロで他のキャラクターとかぶさって困らなければ0fでもよいと思います。
それで、こちらはリンゴを画面の左端から右端までの座標を乱数で決めて新たに置いている、座標を置きなおしている命令であることはわかります。
この放送時の書き方ですと、AIから「Screen.widthやScreen.height,はピクセル単位のスクリーン座標である」と言われました。
それに対してInstantiate()で生成されたオブジェクトはワールド空間に存在なので、obj.transform.localPosition = new Vector3(x ,Screen.height, 0f);は画面外に配置される可能性が高い、ということです。
解決方法としては「カメラの視野に合わせてワールド座標で直接配置」です。
動画の21分20秒

複数のリンゴの落下ができました!
ここまでできたら完成は間近です!
(3)完成まで
ここまでできたら前回まで話した内容ばかりで、目新しい内容はありません。
まず、タイマーが0を超えるときだけ表示するようにifの条件文の中に表示部分をいれてしまう。
同様に、タイマーが0を超えるときだけ点数を加算するようにifの条件文の中に表示部分をいれてしまう。
動画の22分50秒

ゲームオーバー時に表示するテキストを追加する。Canvas内にGameOverText、GameOver2Textというオブジェクトを作り、表示させる作業を行う。
同じように開始時のメッセージも作る。開始3秒、すなわち表示の時間で28秒経過まで表示されるようにする。似たような作業が続くのでDuplicateで複製させて作成する。
次に音楽や音の追加です。ゲーム中に流れ続けるBGMはDOVA-SYNDROMEでのMAKOOTO作「ちっちゃな探検隊」今流れている音楽です。これを今回はそのまま使用します。次にキャッチした時の音を効果音ラボの「やったね!」.mp3を今回は使用しました。
最後に最初の画面を「3択クイズ」に登場したBuild Settingsでシーン切り替えすれば完成ということです。まず今までのをPiyochanというシーン名にして保存して、新たにNewシーンとして新規作成をし、名前をPiyochan(Start)としました。背景色を黄色とし、テキストのタイトルは、タイトルを2つ重ねて表示させて、少し目立たせています。
SceneManeger.LaodScene(“Piyochan”);を追加。この時、SceneManegerを使うときは上の方でusing UnityEngine.SceneManegement;を記載して呼び込むことが必要です。ただこのように記載しればよいです。
それでBuild Settingsでシーンリストにとばしたいシーンを登録しておくのでした。ところが、Ver6ではBuild Settingsではなく「Build Profiles」という名前に変更されています。まあ、内容はそんなに変わらなかったので、おとなしくシーンリストにとばしたいシーンを登録すればよいです。登録の仕方は、現在実行中のシーンに対して「Add Open Scenes」ボタンで追加するだけなので、Piyochan(Start)実行中にポチッと。そして一回セーブして、Piyochan実行中にポチッと押せば登録できます。
うまくいきました。
動画の27分18秒

今回のスクリプトおよびインスペクター(ぴよキャッチ海賊版)
Unityの場合、スクリプトのリストだけを完成させても変数や画像の関連付けなどが必要になります。今回はインスペクターの様子も同時に紹介しておきます。
Piyoplayer.cs

Piyochanのオブジェクトの中身の様子

Apple.cs

Appleのオブジェクトの中身の様子

Startkey.cs

Keyのオブジェクトの中身の様子

(スタート画面の)Canvasのオブジェクトの中身の様子

以上、今回はここまでです。


コメント