講義中に作った"yoketoru"に要素を追加して作りました。
マウス移動でパンプキンが移動、ゴーストはW・A・S・Dで移動します。 (Wで上、Aで左、Sで下、Dで右)
2体のプレイヤー(パンプキンとゴースト)を動かして音符を取りましょう!
クリア方法は音符をすべて取ることです。
飛行機にあたってしまうとゲームオーバーです。
時間経過と共にスコアは減っていくので、音符を素早くすべて取りクリアを目指しましょう!
- プレイヤー
- 音符
- 敵
- 背景
- google notoのサイトより
- Noto Sans CJK JP
- アセットストアの"Query-Chan" modelからゴーストを使用したのでライセンスロゴを掲載します。
- タイトルにEキーでの説明を追加
- シーン(Description)を新しく追加して、CanvasをTitleからコピー。
- CanvasにTextで説明を追加。
- DescriptionにDescriptionManagerを設定し以下のプログラム追加
- TitleManagerにもプログラムを追加
// Eが押されたら、Titleシーンに切り替え
if (Input.GetKeyDown (KeyCode.E)) {
SceneManager.LoadSceneAsync ("Title");
}
// Eが押されたら、説明シーンに切り替え
if (Input.GetKeyDown (KeyCode.E)) {
SceneManager.LoadSceneAsync ("Description");
}
- Player2を追加
- PlayerをコピーしてPlayer2を作成。
- Player2の子にアセットのパンプキンを追加
- Player2をW・A・S・Dで移動するようにした。
- Player2が画面外に出ないようにした。(Playerだとマウスの位置を取得しているので、new Vector3だけに変えて値を制限した)
if (Input.GetKey(KeyCode.W)){
transform.position += new Vector3 (0f, MAX_SPEED * Time.deltaTime, 0f);
}
if (Input.GetKey(KeyCode.A)){
transform.position += new Vector3 (-(MAX_SPEED * Time.deltaTime), 0f, 0f);
}
if (Input.GetKey(KeyCode.S)){
transform.position += new Vector3 (0f, -(MAX_SPEED * Time.deltaTime), 0f);
}
if (Input.GetKey(KeyCode.D)){
transform.position += new Vector3 (MAX_SPEED * Time.deltaTime, 0f, 0f);
}
transform.position =(new Vector3 (
Mathf.Clamp(transform.position.x, MoveBounds.min.x, MoveBounds.max.x),
Mathf.Clamp(transform.position.y, MoveBounds.min.y, MoveBounds.max.y),
transform.position.z)
);
-
アイテムをもう一つ追加(同じ色で分かりにくいですが、音符の形が違います。)
- BallをコピーしてBall2を作成(BallとBall2の子にそれぞれ違うPrefabを追加)
- BallSpawnerもコピーし、Ball2Spawnerを作成。Prefabを変えた。
-
難易度の設定
- タイトル画面で1・2・3キーを押すことで選択できるようにした。(1で簡単、2で普通、3で難しい)
そしてCanvasにText追加- Game1、Game2のシーンを新しく追加し、Gameから中身をコピーし、Spawnerで敵とボールの数と速さを調節。
- タイトル画面で1・2・3キーを押すことで選択できるようにした。(1で簡単、2で普通、3で難しい)
// 1が押されたら、Game1シーンに切り替え
if (Input.GetKeyDown (KeyCode.Alpha1)||Input.GetKeyDown (KeyCode.Keypad1)) {
SceneManager.LoadSceneAsync ("Game1");
}
// 2が押されたら、Gameシーンに切り替え
if (Input.GetKeyDown (KeyCode.Alpha2)||Input.GetKeyDown (KeyCode.Keypad2)) {
SceneManager.LoadSceneAsync ("Game");
}
// 3が押されたら、Game2シーンに切り替え
if (Input.GetKeyDown (KeyCode.Alpha3)||Input.GetKeyDown (KeyCode.Keypad3)) {
SceneManager.LoadSceneAsync ("Game2");
}
- Player2が画面から出ないようすること
Playerはマウスの位置を取得していて、プログラムをそのまま使うことはできなかったので、色々なサイトを調べてがそのサイト古かったりしてエラーがでたりしたので、かなり考えて試行錯誤してやっと出来た。
- アイテムを追加したときに、取得した時のScoreを変えること。試しに、MoveBallをコピーしてMoveBall2を作成してみたが、Ballcountのプログラムがどこでどう動いているか理解できずに、片方だけ全部取ったらClearと出てしまい諦めました。
- タイトル画面でTextの"キーを押してスタート!"を点滅させたかった。
結局、自分の能力不足で全然意図したものが出来なかった。
そして、メモすることがとても大切だとわかりました。
- タイトルでキーを同時に押すと、押された順にシーンがすぐに切り替わってしまうこと。(解決方法が分からなかった)
水曜日の講義が終わり家に帰ってから、WebGlでビルド出来るかを確かめたときに起きたことです。
WebGlでのビルドは成功して、フォルダが表示されました。
そして、試しに"index.html"を開いて動作を確認した所、日本語が表示されていない事件が起こりました。
調べてみたところ、Unityの標準設定のフォント(Arialフォント)には日本語が含まれていないとのことでした。
解決方法は、日本語が含まれているフォントに変えることです。
なので、google noto より"Noto Sans CJK JP"をダウンロードし、Unityに実装して、すべてのフォントを変えて解決ではなく、"Arial"と"Noto Sans CJK JP"では、少し文字の大きさが違ったので調整して解決しました。
この現象はPCビルドでは起きなかった。