1219 世界を巻き戻そう! - mishimatsu/AdventCalendar2014 GitHub Wiki
前回は、パワーゲージに応じて、ボールを飛ばすスピードを変化させました。
しかし、ボールを投げるとそれで終わりになってしまいます。
今回は、シーンをリセットして、ボールを何度でも投げられるようにしたいと思います。
まずは、Unityを起動します。
今回もBallスクリプトを使います。
ダブルクリックして、Monodevelopを起動しておきます。
ゲーム画面を始まったときの状態へ戻すには、どうすればいいでしょうか?
これが今回の課題です。
必要な処理をリストアップしてみましょう。
1.ボールの位置をスタート位置に戻す。
2.シーンに配置している物(GameObject)、今回の場合は、円柱や板を初期位置に戻す。
3.ボールが投げられたかのフラグをリセットする。
これだけの処理で、元に戻るでしょうか?
これだけでは、シーンを元通りにすることは出来ないようです。
ボールをスタート位置に戻す場合、スタート位置がどこかを保存しておく必要があります。
これは、シーンに配置している他の物(GameObject)についても同じことが言えます。
あと、位置だけではなく、Rigidbodyのパラメータなども初期値に戻す必要があります。
さすがにちょっと大変ですね。
別の方法を試してみましょう。
シーンをロードする。
今回作成した、シーンを新たにロードしなおすことで、初期状態に戻すことが可能です。
今回は、このやり方でやってみましょう。
シーンの追加。
シーンをロードするためには、少し準備が必要です。
シーンをロードできるように、シーンの登録を行います。
メニュー→File→Build Settingsを選択します。
Build SettingsのWindowが開きます。
Add Currentのボタンを押して、現在のシーンを追加します。
シーンが追加されました。
ball.unityがScenes In Buildに追加されたと思います。
※ball.unityは、シーンを作成した時の名前になるので、別の名前で作っている人は、これとは別の名前が出ているかもしれません。
これで、シーンをロードできる準備ができました。
次は、シーンをロードするスクリプトを追加します。
やり直すボタンを追加。
ボールを投げた後に、やり直しをするボタンを追加しましょう。
やり直しボタンが押されたらシーンをロードする処理を実行します。
今回の処理は、OnGUIの関数内に記述します。
スクリプトを見ていきましょう!
今回追加したスクリプトは、40行目から44行目までになります。
それでは、順番に見ていきます。
40行目
if (isThrowing) {
これは、Update関数内でも同じようなことをやっていましたね。
今回の条件文は、isThrowingがtrueだったらif文に続くスクリプトの処理を行うことになります。
Update関数内では、isThrowing == falseという感じで、==演算子を使っていました。
今回の場合もisThrowing == trueと記述することも可能です。
この条件文で、ボールが投げられた時のみ、やり直しというボタンを表示します。
41行目
if (GUI.Button(new Rect(10, 60, 100, 32), "やり直し")) {
まず、GUI.Button(new Rect(10, 60, 100, 32), "やり直し")の部分を見ていきます。
GUI.Button関数で、ボタンを表示する処理を行っています。
パワーゲージを表示した時と同じように、Rectで位置、サイズを設定しています。
ここでは、画面の10,60という座標に、幅100、高さ32のサイズで表示しています。
次に、"やり直し"という、新しい記述が出てきました。
"(ダブルクォーテーション)で、囲まれた部分は、文字列として扱われます。
ここでは、「やり直し」という4文字が文字列として扱われて、ボタンに表示されます。
必ず"(ダブルクォーテーション)で、囲むのを忘れないで下さい。
{と同様、対になっていないとエラーになってしまいます。
なぜ、if文があるかというと、GUI.Buttonの関数は、ボタンが押された時にtrue、押されていなければfalseを返します。
このif文がtrueになった時に、シーンのロードの処理を行います。
42行目
Application.LoadLevel("ball");
ボタンが押されたらシーンのロードの処理を行います。
ここにも文字列のballが出てきています。
このballは、シーンの名前になります。
Build Settingの際に、シーンを追加しましたが、その時表示される名前を入力します。
この名前を間違えるとシーンがロードされないので注意してください。
スクリプトをセーブしましょう。
※ここに入力する文字列は、Build SettingのScene In Buildに表示されるシーン名になります。
今回の場合、ball.unityと表示されていると思います。
拡張子.unityを除いたballがシーン名になります。
実行してみよう!
ボールを投げた後、パワーゲージの下にやり直しのボタンが表示されましたね。
やり直しボタンを押してみましょう。
無事に、やり直しが出来ましたか?
できない場合、次のことを確認して下さい。
1.Build Settingsにballのシーンが追加されているか?
2.スクリプトの42行目Application.LoadLevel("ball");のballの部分が追加したシーンの名前と同じになっているか?
今回作成したサンプルをWebBrowserで実行できるようにしておきました。
WebPlayer
練習問題
1.ボタンを表示する位置を変えてみよう。
2.ボタンのサイズを変えてみよう。
3.ボタンに表示されている文字を変えてみよう。
ゲームとしては、ちょっとまだ物足りないですね。
次回は、エフェクトやサウンドを追加していきたいところですが、その前にスクリプトでエラーが発生した時の対処について説明したいと思います。
それでは、楽しいUnity Lifeを!
参考文献
GUI.Button
GUI の基本 / GUI Basics