‫フルーツ忍者のUIを見ると､ 井戸､ スコア､ ベストスコア､ そしてタイマーがあることがわかります｡
‫そして､ それはもちろん､ 私たちのゲームにも必要なことです｡
‫では､ まず新しいオブジェクトを作り､ ゲームマネージャーと名付けましょう｡
‫そしてこの中に､ スクリプトを追加します｡
‫そこで､ 新しいスクリプトを作ってそれを呼び出し､ そのゲーム・マネージャーに新しいスクリプトを割り当ててみましょう｡
‫それでは､ scripts フォルダに新しいスクリプトを作成し､ game manager と呼んでみましょう｡
‫では､ ゲームマネージャーをゲームマネージャースクリプトにドラッグしてみましょう｡
‫では､ ゲームマネージャースクリプトをゲームマネージャに誘導し､ それを編集してみましょう｡
‫さて､ ゲームマネージャーがとりあえず行うのは､ スコアのカウントです｡
‫そこで､ そのためのメソッドといくつかの変数を作ってみましょう｡
‫まず､ スコアの値を代入した整数が必要で､ 次にテキスト・オブジェクトが必要です｡
‫そして､ テキストで動作させるためには､ unity engine start UIを追加する必要があります｡
‫つまり､ 名前空間､ ユニティエンジン､ UIです｡
‫これでテキスト､ クラス､ パブリックテキストにアクセスできるようになりました｡
‫public void, increase score, そして誰かがこのメソッドを呼び出すたびに､ あるいはどのクラスもこのメソッドを呼び出すたびに､
‫スコアを2つずつ増やしていきましょう｡
‫だから2つ増やす｡
‫そして､ スコアテキストも設定したいと思います｡
‫ですから､ スコアが上がるたびに､ もちろんtext変数も更新したいのです｡
‫だから､ スコアからストリングへ｡
‫さて､ このスクリプトを保存して､ この中のUnityに戻りましょう｡
‫新しいオブジェクトを作成し､ それをUIと呼ぶことにします｡
‫そこで､ ゲームオブジェクトの名前を変えてみましょう｡
‫それをUIと呼びましょう｡
‫そして､ キャンバスを作成するUIテキストをここに追加して､ キャンバスをUIゲームオブジェクトにドラッグしてみます｡
‫そして､ ここで使いたいのは､ キャンバスのスカラーが一定のピクセルサイズを持たず､ 画面サイズに合わせて拡大縮小することです｡
‫そして､ 解像度は､ 例えば800倍の800､ 19､ 20倍の1080など､ お好きなように設定できます｡
‫そこで､ とりあえずテキストを入れるだけにしておきます｡
‫では､ 現在どのような状態になっているか見てみましょう｡
‫キャンバスに移動してみましょう｡
‫ここにいたのか｡
‫そして､ 私たちのテキストは現在､ 私たちのゲームの中にも入っていないことがお分かりいただけると思います｡
‫それでは､ UI要素がリセットされ､ テキストの位置を変更できるようになったことを確認しましょう｡
‫スコアテキストをUIの左上に表示させたいのですが｡
‫では､ 少し拡大して､ 矩形変形を左上に変更してみましょう｡
‫これがアンカー・プリセットになります｡
‫つまり､ この観点からXとYの値を計算することになる｡
‫だから､ ゼロゼロを選んでみよう｡
‫そして､ テキストがこの左上隅にあるのがおわかりいただけると思います｡
‫さて､ 良い値とは､ 例えば､ 100と-75のようなものである｡
‫あと､ 文字の大きさも変えてみようかな｡
‫これがスコアテキストになるわけです｡
‫だから､ ここにゼロのような値を入力して､ 名前を変えてみようか｡
‫だから､ スコアテキストと呼ぶことにします｡
‫さて､ もちろん､ フォントサイズが少し小さすぎるので､ 変更してみましょう｡
‫仮に120としよう｡
‫そして､ 今お見せしたように､ 消えてしまうのです｡
‫だから､ もうその数字を見ることはないんです｡
‫そしてそれは､ オーバーフローと関係がある｡
‫そこで､ 水平方向と垂直方向のオーバーフローを追加すると､ 何があっても数字が表示されるようになるのです｡
‫ここで､ 例えばこのオブジェクトの幅と高さがどのようなサイズであっても､ です｡
‫ということで､ 現状ではそのような形になります｡
‫遊び心満載の位置づけではないのかもしれませんね｡
‫そうかもしれないので､ そこに引きずり込もう｡
‫だから､ ゼロというワイドポジションは､ そのあたりでいいと思うんです｡
‫ファイン
‫では､ 文字の色を変えてみましょう｡
‫オレンジのイッシュかオレンジのイッシュの色にしよう｡
‫そんな感じ｡
‫では､ 見てみましょう｡
‫ゼロである｡
‫もちろん､ 背景はもうきれいには見えません｡
‫ゲームの背景を変える必要がある｡
‫でも､ 少なくとも私たちにはスコアテキストがあります｡
‫では､ そのテキストを複製して､ これをハイスコア・テキストと呼ぶことにしましょう｡
‫そして､ 今度はそのハイスコアのテキストを変えてみましょう｡
‫これを一番下までドラッグして､ 最高のコロンゼロを入力してみましょう｡
‫そしてご覧の通り､ これはもちろん大きすぎる｡
‫では､ それを36に縮小してみましょう｡
‫そのほうがよっぽど良さそうですね｡
‫だから､ ゲームベストゼロで見てください｡
‫さて､ とりあえずメインカメラの背景を変えてみようかな｡
‫だから今は､ そうなんです｡
‫この色､ このオレンジがかった茶色､ 今ならこっちの方が似合うかもしれない｡
‫大丈夫です｡
‫今はそのほうがいいと思います｡
‫さて､ この数字をもう少しクールに見せるために､ アウトラインを追加して､ ここからUIに移動できるようにします｡
‫コンポーネントを追加し､ UIエフェクトを追加し､ そしてここにあるアウトラインは､
‫ゲームにアウトラインを追加してくれます｡
‫ご覧のように､ スコアテキスト､ ハイスコアテキストにエッジ､ アウトラインエッジを作成することができます｡
‫ここで､ 例えばメインカメラが明るい色になるのであれば､ 白の方が理にかなっていますし､ そうであれば黒の方が見栄えがします｡
‫だから､ たとえばこの色だったら､ スコアが効いていいんじゃない？
‫ブラックの色｡
‫だから､ ハイスコアのテキストも手に入れるべきで､ その方がずっと良さそうだと思うのです｡
‫そこで､ UIエフェクトのアウトラインを追加してみましょう｡
‫そして今､ ご覧のように見違えるようになりました｡
‫それでは､ スコアテキストをコードに実装してみましょう｡
‫ゲームマネージャーはすでにスコアのテキストを期待しているので､ それをドラッグすれば､ 現在のスコアはゼロになります｡
‫そこで､ 例えばこれを5とすると､ どうなるか見てみましょう｡
‫実は､ それを5つの終盤に設定しよう｡
‫ご覧の通り､ まだ何も起こりません｡
‫そこで､ スコアをつける必要があります｡
‫つまり､ このメソッドを呼び出す必要があるということです｡ この得点増加メソッドは､ フルーツスクリプトの中で呼び出されます｡
‫だから､ スライスした果物を作るたびに､ 私たちは追加点を得たということになるのです｡
‫そこで､ そのためにゲームマネージャー型のfindオブジェクトを追加して､
‫スコアを増やしてみましょう｡
‫これで､ 果物をスライスするたびにスコアが増えていくわけです｡
‫わかりました｡
‫では､ 次にテストしてみましょう｡
‫ゲームを始めましょう｡
‫そして､ 果物をスライスしてみましょう｡
‫そして､ ご覧の通り､ 毎回スコアが2つずつ増えていくのです｡
‫また､ 現在はオレンジだけをスライスしていますが､ 他のオブジェクトもスライスできるように､ スライスした果物によって異なる値を持たせたい場合もあるでしょう｡
‫そうすると､ 例えば異なる値も欲しくなります｡
‫だから､ 現状ではここに3つだけ割り当てることにしよう｡
‫もちろん､ ゲームマネージャー自身はこの3つが何をすべきかを知らないので､ エラーになります｡
‫そこで､ ここにintポイントを追加して､ スコア＋2＋イコールとするのではなく､ 配信されたポイント数だけ増やすことにします｡
‫つまり､ 今の場合､ 3つになるわけです｡
‫だから､ 走るたびに､ 果物を切るたびに､ 今なら勝ち点3が取れるはずだ｡
‫では､ それが本当なのかどうか､ 実際に確かめてみましょう｡
‫だから
‫フルーツをスライスしてみよう
‫そして､ そこに私たちはいます｡
‫勝ち点3を得る｡
‫わかりました｡
‫さて､ 次に､ ゲームを停止する機能を追加する必要があります｡ なぜなら､ 今､ 私たちは延々とゲームをすることができ､ 常にポイントを得ることができ､
‫どんな行動に対しても罰がないのです｡
‫もちろん､ フルーツ忍者でもそれを変えたいと思っています｡
‫それは通常､ 爆弾かタイマーで行われます｡
‫そのため､ タイマーが切れるとゲームが停止してしまいます｡
‫あるいは､ 爆弾に当たると､ タイマーも止まってしまう｡
‫では､ ゲームに爆弾を追加してみましょう｡
‫では､ シーンビューに移動してみましょう｡
‫モデルフォルダを開いてみましょう｡
‫そして､ ここに爆弾があったのです｡
‫それでは､ シーンビューに移動して､ 爆弾をゲームにドラッグしてみましょう｡
‫まあ､ 実際､ 大きすぎるから､ また捨てようね｡
‫では､ 爆弾を削除して､ 爆弾のモデルに移動してみましょう｡
‫では､ スケールファクターを0に変更してみましょう｡ 3し､ それを応用する｡
‫そして､ 今度は爆弾を引きずり込むことができるのです｡
‫そして､ その大きさがより良いと思います｡
‫では次に､ いくつかのコンポーネントを追加してみましょう｡
‫例えば､ 物理2D､ 剛体､ 物理からDXボックスや実際に円形のコライダなど｡
‫ほら､ これで大丈夫でしょう｡
‫なるほど､ サークルコライダーはよく似合うと思います｡
‫では､ ぶつかったらどうするか？
‫まあ､ ゲームを一時停止して､ ゲームオーバーの画面とかを表示させたいんですけどね｡
‫では､ ボムにスクリプトを追加してみましょう｡
‫そこで､ 新しいスクリプトを追加して､ そのスクリプトをボムスクリプトと呼ぶことにします｡
‫そして､ その爆弾スクリプトをここで開いてみましょう｡
‫DXメソッドにon trigger enterを追加する予定です｡
‫だから､ 私たちが爆弾をぶつけるたびに､ 刃が私たちに当たるかどうか確かめたいのです｡
‫つまり､ ブレードbはコリジョン ドットに相当します｡
‫実は､ このコリジョンではなく､ ここのコリジョンドットゲットコンポーネントとブレードがコリジョンなのです｡
‫つまり､ そのコードはもう見たのですが､ トリガーされた､ あるいはヒットしたオブジェクトが私たちをトリガーした場合､
‫それがブレードであれば､ 何かをしてください､ ということなのです｡
‫そして､ それが刃物でないなら､ 返品してください｡
‫つまり､ Bでなければreturn､ Bであればgame manager型のオブジェクトを探したいということです｡
‫そこで､ ゲーム・マネージャーにアクセスして､ ゲーム・マネージャーからメソッドを呼び出したいと思います｡
‫だから､ 爆弾が落ちたとしよう｡
‫このため､ バンプを叩くと､ 爆弾の衝突時に呼び出されるメソッドがないと文句を言われます｡ そのメソッドをゲーム・マネージャで見つけるか､
‫ゲーム・マネージャでメソッドを作成する必要があります｡
‫そこで､ 爆弾のヒット時にこのメソッドをvoidで作成し､ 外部からアクセスできるようにpublicにしておきましょう｡
‫もちろん､ 今はバンプが当たったということにしておいてください｡
‫だからデバッグログ爆弾がヒットする｡
‫では､ そのスクリプトを保存してみましょう｡
‫ボムスクリプトも保存しておこう｡
‫これで､ エラーが出なくなったことが確認できました｡
‫では､ それを検証してみましょう｡
‫では､ 戻ってみましょう｡
‫実は､ 追加されたついでに爆弾スクリプトをscriptフォルダにドラッグしておこう｡
‫そして､ 今度はゲームを動かしてみて､ 爆弾に当たるかどうか見てみましょう｡
‫実は､ 爆弾の動きが速すぎたんです｡ だから､ 爆弾を一番上に押し上げて､ 今できることは､
‫爆弾を解除することです｡
‫重力
‫では､ 重力規模をゼロとしましょう｡
‫そして､ どうなるか見てみましょう｡
‫そして､ 爆弾をドラッグしたり､ 叩いたりすることができるんだ｡
‫実は､ サークルコライダーにはトリガーがないので､ 私たちのトリガーとしては､ もちろん何も起こりません｡
‫では､ 今一度､ どうなるのか見てみましょう｡
‫そして､ ご覧の通り､ ボブのヒット曲は「Every Time that I Go Through the bomb」という曲です｡
‫わかりました｡
‫そこで､ 今度は重力のスケールをもう一度1に変えてみましょう｡
‫あれはあくまでテスト用です｡
‫そして今､ 私たちの爆弾は動作するはずです｡
‫さて､ 私たちがやりたいことは､ 私たちがやりたいことです｡
‫その都度､ ゲームを停止してください｡
‫だから､ 時間ドットの時間スケールはゼロに等しいと言えばいいのです｡
‫それでは､ ゲームが止まってしまうだけです｡
‫ですから､ 今回のタイムスケールは一般的にはゲームのスピードを落とすことができる機能です｡
‫つまり､ ゼロは速度が全くない､ つまり動きがないことを意味し､ ゲームを止めてしまうのです｡
‫そして､ 1つは通常のスピードがあることでしょう｡
‫つまり､ タイムスケール1がデフォルト値で､ タイムスケール0は､ 例えばゲームを停止させる場合です｡
‫では､ そのスクリプトを保存して､ もう一度チェックして､ 爆弾を素早く打てるかどうか見てみましょう｡
‫ゲームを止めるために
‫そして､ ご覧のようにダッシュで駆け抜けると､ 実は私の果実が止まって､ 爆弾も止まっていたのです｡
‫さて､ これでバンプは1つだけになりました｡
‫だから､ この一段落はいいのですが､ ボムもランダムに発生させたいのです｡
‫そのためには､ スポンサーのゲームオブジェクトに戻る必要があります｡
‫だから､ 私たちの脚本はより良いものになった｡
‫では､ スポンサーのスクリプトを見てみましょう｡
‫また､ 現状では1種類のフルーツしかスポーンできないので､ 1種類しかスポーンできません｡
‫今回はオレンジですが､ オレンジをスポーンしたり､ バナナをスポーンしたり､ 思いついたものをスポーンしたり､
‫ボムをスポーンしたりできるようにしたいですね｡
‫そのためには､ この実を配列にスポーンするように変更する必要があります｡ 配列は､ ゲーム・オブジェクトの配列です｡
‫では､ 角括弧を追加して､ objects to spawnに変更してみましょう｡ 果物だけでなく､ オブジェクト全般が対象となります｡
‫さて､ もちろんここでは､ 単純な果物を一つ生み出そうとして､ この方法はもう利用できないので､ エラーが発生します｡
‫そこで必要なのは､ ランダムにゲームオブジェクトを作成することです｡ バンプか別の果物のどちらかを作成します｡
‫そして､ 単純に､ よし､ それを産み落とせということです｡
‫では､ そのようにしましょう｡
‫ゲームオブジェクトを作り､ G0と呼び､ それをNULLに設定し､ ランダムな値を設定しましょう｡
‫では､ ランダムな値の範囲を作成してみましょう｡
‫いろいろな種類の果物や､ いろいろな種類のゲームオブジェクトをランダムに作りたいのです｡
‫例えば､ 爆弾は他の何かよりも少ない頻度で発生するはずです｡
‫ではここで何を言いたいかというと､ Pが10より小さい場合､ 値は0から100の間であり得るからです｡
‫だから､ もし10より低かったら､ バンプを産み出したいんです｡
‫つまり､ ぶつかる確率は大体10％､ 絆のぶつかり合いが生まれる確率です｡
‫だから､ Gohはゼロの位置でスポーンするオブジェクトということにしているんだ｡
‫だから今はもちろん､ これを大切にしなければならない｡
‫そのため､ バンプをゼロの位置に割り当てる必要があり､ そうでない場合は､ 1とオブジェクトの長さの間のランダムな範囲でスポーンするオブジェクトで行くように設定したいと思います｡
‫そのため､ 確率は10％です｡
‫バンプを作成する
‫そして､ 90％の確率で､ 今までとは違う果実を作り出します｡
‫そしてここでは､ もちろん中括弧を使う必要があります｡ これは､ これを割り当てようとしているのがインデックスだからです｡
‫つまり､ 10%の確率でバンプが発生し､ 90%の確率で､ 割り当てた他のオブジェクトの中からランダムに発生するのです｡
‫そして今は､ 当然ながら､ スポーンする果物のインスタンス化はもう行っていません｡
‫そのゲームオブジェクトをインスタンス化するのです｡
‫さて､ もちろん､ fruits to spawnと呼ばれるものを生成するオブジェクトを作ることもできます｡
‫そして､ もちろん､ public game object bump と言って､ ここに bump を割り当てれば､
‫あとはゴールドをここに Bob と変更できます｡
‫それも選択肢の一つでしょう｡
‫もちろん､ 範囲はゼロからどこかまででしょう｡
‫それも選択肢のひとつでしょう｡
‫バンプは非常に特殊な果物で､ 他に何を加えても好きにできるので､ その方が少し直感的な選択かもしれません｡
‫というのも､ 先ほど紹介した別の方法では､ バンプを一番最初の場所に割り当てるように注意しなければならないからです｡
‫そして､ それは私たちがコードを作ったからこそわかることなのです｡
‫しかし､ 他の誰かがコードを実行し始めたり､ コードを編集し始めたりすると､ その人は混乱するかもしれません｡
‫わかりました｡
‫それで､ 今度は､ よし､ ここでボブになるんだと確認します｡
‫では､ それを保存して､
‫Unityに戻りましょう｡
‫そこで､ 何が起きているのかがわかります｡
‫だから､ スポンサーは果実を産んでもらうべきだ｡
‫現在は､ オレンジ色だけです｡
‫そして数秒後､ 果物のスポーンからオブジェクトのスポーン､ バンプに変わるはずです｡
‫わかりました｡
‫バンプと､ スポーンするオブジェクトがあるわけです｡
‫そして､ 現在､ スポーンしたいオブジェクトを1つだけと言うことにしています｡
‫そして､ プレハブに移動して､ そこにオレンジをドラッグしてみましょう｡
‫そこで､ スポーンはオレンジをここに誘導します｡
‫そして､ 今度は爆弾について｡
‫実は､ 爆弾のプレハブはまだないんです｡
‫では､ 爆弾のプレハブを作ってみましょう｡
‫この爆弾をプレハブフォルダにドラッグしてみましょう｡
‫そして今度は､ その爆弾をスポッターにドラッグしてみましょう｡
‫それをテストするために､ ここで値を50に設定して､ バンプが出る確率が5050になるようにするといいかもしれません｡
‫だから､ 凸凹があるのか､ 凸凹が全体的に来るのかを見るだけでいいんです｡
‫わかりました｡
‫だから､ ぶつかる､ みかん､ 爆弾､ みかん､ 爆弾があるんです｡
‫そして､ アンやバンプを打つと､ まあ､ 外で打ったんだけど､ バンプを打ったら今度はドカンとゲームが止まってしまうんです｡
‫では､ 今度は......10に戻してみましょうか｡
‫そのほうがいい｡
‫そして今､ 爆弾が出てくる確率は10％にしかならない｡
‫もちろんです｡
‫そして､ ご覧のように､ オレンジ､ オレンジ､ オレンジ｡
‫それから､ いつもポイントをもらっています｡
‫ある時は､ 爆弾が出てくるかもしれません｡
‫今のところ､ 誰もいなかった｡
‫実は｡
‫さあ
‫爆弾はどこだ？
‫見ての通り､ チャンスというのはそういうものでしょう？
‫チャンスはチャンスでしかない｡
‫だから､ バンプを手に入れる前に､ ここでガッツリオレンジを手に入れるということもあり得るんです｡
‫まあ､ 確率は非常に低いし､ 爆弾はあるんだけどね｡
‫完璧です｡
‫なるほど､ 結構かかったんですね｡
‫見ての通り､ 爆弾を1つ手に入れる前にすでに40個のオレンジを倒しているので､ 10％あることになります｡
‫まあ､ 10％なんですけどね｡
‫いつ起こるかわからない｡
‫しかも､ それが起きたのは､ 40個近く､ いや､ 50個でもあったかな､ みかんの一つ一つに当たらないからです｡
‫わかりました｡
‫それでは次のビデオで､ ゲームオーバーになる方法と､ ゲームに再スタートする方法について説明します｡
‫では､ 現地でお会いしましょう｡