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