にしのクエスト2

情報処理技術者試験と資格学校講師の日常

20221224103753

Unityで学ぶプログラミング (初心者)寸止めゲームを作ろう(最終回)ハイスコアの記録

上から落ちてくるブロックを床の上で寸止めして、ギリギリを
狙うゲーム最終回です。

応用すれば、いろんなゲームに使えそうな技術が多くあるので、
是非勉強してみてください。

初心者向きとは書いていますが、ざっくりなところもあります。
ご容赦ください。わからなければ、質問してくださいね。
(TwitterとかでもOKですよ)

今日もGameCのプログラムを改造していきます。

最終回ですね!「ハイスコアの記録」をさせます。

 

一応、GameCの完成版を全部載せておきますね。

public class GameC : MonoBehaviour
{
//記録する変数
float Score;

//最高記録を保管する変数
float MaxScore=5.0f;
 
最初にスコアを表示する変数と、最高記録を表示する変数を書いておきます。
最高記録の値には高さを設定しておきます。一回目は常に最高記録更新にします。


//落下オブジェクトを格納する変数
GameObject ObjA;

//落下オブジェクトのRigidbodyを格納する変数
Rigidbody ObjARigid;
 
//フラグ
public int missFlag=0;
 
//3DTextを格納する変数
GameObject Mes;

//テキストを格納する変数
TextMesh MesTM;

void Start()
{
//落下オブジェクトを取得
ObjA=GameObject.Find("ObjectA");

//落下オブジェクトのRigidbodyを取得
ObjARigid=ObjA.GetComponent<Rigidbody>();
 
//テキストを取得
Mes=GameObject.Find("Message");

//テキストのテキストメッシュを取得
MesTM=Mes.GetComponent<TextMesh>();
}

void Update()
{
//スペースキーを押すと
if(Input.GetKey(KeyCode.Space))
{
//重力を切る
ObjARigid.useGravity = false;

//加速度をなくす
ObjARigid.velocity = Vector3.zero;
 
//スコアを保存
Score=ObjA.transform.position.y-0.5f;
 
この辺りからが新しいところかな?

//もし、最高記録を更新したら
if(MaxScore>Score){
//スコアを記録する
MaxScore=Score;
//距離を表示
MesTM.text="最高記録更新!"+Score;
}

//もし、最高記録を更新していなければ
if(MaxScore<Score){
//距離を表示
MesTM.text="地面まで"+Score;
}
 
最高記録を更新した場合と、
していない場合の両方の判定式を書きます。

あとで気がついたのですが、失敗フラグが立っていない場合のみ
最高記録を確認するようにしても良かったかもです。
if(MaxScore>Score&&MissFlag==0)
みたいな感じで。


//再開の処理2秒後に
Invoke("Mokkai",2.0f);

}

//ミスフラグが立った場合テキストを更新
if(missFlag==1)
{
//失敗メッセージ
MesTM.text="失敗!";

//重力を切る
ObjARigid.useGravity = false;

//加速度をなくす
ObjARigid.velocity = Vector3.zero;
 
//フラグを戻す
missFlag=0;
 
//再開の処理2秒後に
Invoke("Mokkai",2.0f);
 
}
}

void Mokkai(){
 
//メッセージ
MesTM.text="もう一度";

//物体の高さを戻す
ObjA.transform.position=new Vector3(0,5,0);
 
//重力をon
ObjARigid.useGravity = true;

//スコアのリセット
Score=0;
}

}


というわけで、小さなゲームを作ってみました。
是非、いろいろと改造して自分なりの工夫を付け加えてください。


それではよきプログラミングライフを!
またね。