Unity

UnityでシューティングゲームのHPを表示する

前回までで敵と自機を動かすことができました。

今回は自機のHPを設定して敵弾に触れたら

HPを減らして表示したいと思います。

1.ヒエラルキービューで右クリック→create→ UI→ text
名前を HPtext にしました。
HPの初期値を3にするのでnew textの部分を書き換えて
ゲーム最初に表示される文字列を00003に指定。

2.アンカーを画面左上に設定してディスプレイの大きさにかかわらず
画面左上に表示できるようにする。
右のインスペクタビューで設定できますよ。

3.テキストのUIを書き換える監督を作る。
プロジェクトビューで右クリック→create→ C#scriptで
名前を HPkantoku にしました。

4.いろいろ記述していく。
↓最初にUI使うのに必要なこれを宣言
using UnityEngine.UI;

次にMonoBehaviour内で
現在のHPを表示するテキスト用のgameobject型変数、HPdamegeを宣言
GameObject HPdamege;

自分のHPの初期値を宣言
int myhp = 3;

5.スタート関数内で
UIのHPtextを見つけてHPdamegeに代入、実体化
this.HPdamege = GameObject.Find ("HPtext");

6.スタート関数

//他のオブジェクトからアクセスできるようにpublicで記述
public void DMGsub() {

//ダメージ受けたらHP減らす
this.myhp -= 1;

//現在のHPを表示して返す。myhpは数値型なのでToStringで文字列に変換。
this.HPdamege.GetComponent().text = myhp.ToString("D5");
}

7.できたら保存する。

8.ヒエラルキービューで右クリック→create→ create Emptyで
空のGameObjectを作成。
名前を HPkantoku にします。

9.さっき書いたスクリプトを上の空のゲームオブジェクトにD&Dで
アタッチして実体化。

10.自機と弾が衝突したことを監督に伝えて
HPを減らす処理をしてもらうようにする。
自機と弾の当たり判定はEsmoveに書いてあるから
次はこいつを書き換える。

//衝突したら弾を消す処理の部分を
if (kyori < rE + rS) {
Destroy (gameObject);
}

↓このようにする
if (kyori < rE + rS) {
Destroy (gameObject);

//監督に衝突を伝える
//HPdamegeオブジェクトのDMGsub関数にアクセスするための
//gameobject型変数、collisionに
//gameobjectのHPdamegeをfind関数で見つけて実体化。
GameObject collision = GameObject.Find("HPkantoku");

//getcomponentでHPkantokuオブジェクトのDMGsub関数にアクセスすると
//あっちでHP−1してくれてテキスト表示してくれる
collision.GetComponent ().DMGsub ();
}

11.できたら保存して実行してみる。

うほー
できた できたー^^v

だいぶ前に他のオブジェクトにアクセスする方法がわからず
ややこしいテキスト表示法をやらかしたけど
今回はうまくいったかも。

今回出たエラーは
int myhp = 3;の部分を
float myhp = 3.0f;と書いて
DMG関数内で
myhp.ToString("D5")
と書いてしまうと
フロート型で宣言したのにToStringで整数型にしようとしてたから
エラーでした。

//////////////////////////HPkantoku
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; //UI使うのに必要

public class HPkantoku : MonoBehaviour {

GameObject HPdamege; //現在のHPを表示するテキスト用のgameobject型変数、HPdamegeを宣言
int myhp = 3; //自分のHPの初期値を宣言

// Use this for initialization
void Start () {

this.HPdamege = GameObject.Find ("HPtext"); //UIのHPtextを見つけてHPdamegeに代入、実体化
}

//ダメージ表示サブ
public void DMGsub() { //他のオブジェクトからアクセスできるようにpublicで記述

this.myhp -= 1; //ダメージ受けたらHP減らす

//現在のHPを表示して返す。myhpは数値型なのでToStringで文字列に変換。
this.HPdamege.GetComponent().text = myhp.ToString("D5");

}
}

////////////////////////////////////////
ー広告ー



-Unity

© 2024 Bou.O The World Powered by AFFINGER5