Mawa Town

Mawaという人が作る小さな町でMawaTownです。技術と音楽が好き。

開発日誌: Unity::アドベンチャー3Dゲーム開発vol.4::UI開発・光る球に当たると得点に反映されるようにする

f:id:k_mawa:20180201103031j:plain

コメント

光る球に当たると、球が消失して、得点に+1されるようにします。UI(ユーザーインターフェース)の実装がいよいよ始まります。

手順1:Canvasを用意

とりあえず、Canvasを押します ( GameObject>UI>Canvas ) f:id:k_mawa:20180201174310j:plain

UIはこのCanvasという特殊なオブジェクトの上にボタンや文字列、フォームを並べていく感じです。

Canvasが出現すると、↓みたいにTerrainのはじっこに配置されますが、Canvasに関しては何も動かさなければカメラにずっと定位置でうつりますので出現位置はとりあえずは気にしなくても大丈夫っぽいです。(動かすと面白い映り方になるのかも・・・) f:id:k_mawa:20180201174736j:plain

手順2:テストテキストを配置してみる

GameObject>UI>Text で配置ができます。 f:id:k_mawa:20180201174502j:plain

手順3:文字列対応を確認

Textと書いてあるところに書き込むと反映されます。 f:id:k_mawa:20180201175032j:plain

(フォント数が文字列枠をはみ出ると表示されなくなるので注意。枠を拡大するかフォントを小さくすれば表示されます)

こんな感じで表示が無事されましたね^^ f:id:k_mawa:20180201175206j:plain

手順4:Textオブジェクトscoreを設置

いよいよスコア表記をするためのオブジェクトを設置です。スコア表記はコメント文字列がUIに出ていればいいので、TextオブジェクトをCanvas上に配置すればよいですね。 f:id:k_mawa:20180201175310j:plain

手順5:CanvasにScorecontrollC#スクリプトを付加

Scoreを更新するためにCanvasC#スクリプトを付加。スクリプト名をScoreControllとしましょう。中身はこんな感じで黄色の部分がスコアをフレームごとにUPDATEしてくれる(このスクリプトだと”score is calcutating...”(英語がつづり違うし、文法もひどそうだけど検証時間ないのでそのまま載せます。無視してください^^;)が1フレームごとに表示されるという感じです) f:id:k_mawa:20180201175332j:plain

手順6:C#スクリプトとTextオブジェクトを紐づける

"public Text score"と記載したので、コンソール上でそのオブジェクトが何か示すためにドラッグアンドドロップをします。 f:id:k_mawa:20180201175356j:plain

これで、”Score”ではなく、”score is calcutating...”と表示されていれば成功です。

手順7:C#スクリプトで計算

Canvasにくっつけているscorecontrollからスコアをとってきて、衝突判定をしているcollision.csで操作するというものです。

socorecontroll.cs

public static int scoreCount = 0; //最初の点数は0

このstaticをつけとかないと他のスクリプトで参照できなかったので、つけとくのが吉だと思われます。(自分の場合)

collision.cs

public class collision : MonoBehaviour {
    //scorecontrollのC#スクリプトをインポート
    public scorecontroll scorecontroll;

    void OnCollisionEnter(Collision other)
    {
                if (other.gameObject.tag == "blue_orbe") //tag=blue_orbeの場合は
                {
                    scorecontroll.scoreCount++; // 一点追加

                    int scoreCount; //デバッグログ用(オプション)
                    scoreCount = scorecontroll.scoreCount; //デバッグログ用(オプション)
                    Debug.Log(scoreCount); //デバッグログ用(オプション)
                    Destroy(other.gameObject); //ぶつかった球を消去

                }

                if (other.gameObject.tag == "red_orbe") //tag=red_orbeの場合は
                {
                    scorecontroll.scoreCount+=3;  // 3点追加
                    int scoreCount;//デバッグログ用(オプション)
                    scoreCount = scorecontroll.scoreCount;//デバッグログ用(オプション)
                    Debug.Log(scoreCount);//デバッグログ用(オプション)
                    Destroy(other.gameObject); //ぶつかった球を消去

                }
       }            
}

手順8:完成

こんな感じでうまく実装できていますね^^