前回の記事
www.momino1234.com
HPを作る
HPを画面に表示します。
一番簡単な方法は UI Textを使う方法です。
HP表示用のUIを作る
Hierarchyで
右クリック
↓
UI
↓
Text - TextMeshPro
をクリック
もし
TMP Importer
が出たら
Import TMP Essentials
を押します。
名前を変える
Hierarchy欄で
Text (TMP)
をHPTextに変更
文字を変える
Inspectorで
Text Input
を
HP: 3
にします。
HP表示スクリプトを作る
Assetsで
右クリック
↓
Create
↓
Empty C# Script
名前を
HPUI
コードを書く
UIにスクリプトを付ける
Hierarchyで
HPText
をクリック
Add Component
↓
HPUI
Inspectorの
HPUI(Scripts)の項目に
Player
HP Text
が出ます。
そこに
Hierarchyの欄の
Playerと
HPTextを
をドラッグします。

敵に当たったら減らす
PlayerMoveスクリプトを開きます
public GameObject bulletPrefab;の下に
を追加する
敵に当たったらHPを減らす
void OnCollisionEnter2D(Collision2D collision)
{ の下に
を追加
タグをつける
PlayerMove(Scripts)を開きます
if (collision.gameObject.name == "enemy")の部分を
if (collision.gameObject.CompareTag("Enemy"))に置き換えます
敵をクリック
Hierarchy欄で
Enemy
オブジェクトをクリックします。
Inspectorの項目に
👇
Tag
Untagged
があります
Tagを追加
Tag
↓
Add Tag...
をクリック
新しいタグを作る
- を押して
Enemy
と入力
敵にタグをつける
もう一度
Enemyオブジェクト
↓
Tag
↓
Enemy
を選びます。
AssetsのEnemyのタグも変更
AssetsのEnemyのタグも同様に変更してください。
これでコードが動きます
if (collision.gameObject.CompareTag("Enemy"))
{
hp -= 1;
}
なぜTagを使うのか
「名前」だと問題が起きます👇
Enemy
Enemy(Clone)
Enemy1
全部違う名前になります。
でも「タグ」なら
Enemy
で 全部まとめて判定できます。
再生
敵に当たると
HP: 2
HP: 1
HP: 0
ゲームオーバー
そして プレイヤーが消えます。
もしエラー表示がでたら
もしこれで
MissingReferenceException: The object of type 'UnityEngine.Transform' has been destroyed but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object.
UnityEngine.Object+MarshalledUnityObject.TryThrowEditorNullExceptionObject (UnityEngine.Object unityObj, System.String parameterName) (at <6a469c5cf96a43eab23a293167261e20>:0)
UnityEngine.Bindings.ThrowHelper.ThrowNullReferenceException (System.Object obj) (at <6a469c5cf96a43eab23a293167261e20>:0)
UnityEngine.Transform.get_position () (at <6a469c5cf96a43eab23a293167261e20>:0)
CameraFollow.Update () (at Assets/CameraFollow.cs:9)
このエラーが出た場合、
エラーの意味はこれです👇
MissingReferenceException
Transform が Destroy されたのにまだ使おうとしている
ログを見ると
CameraFollow.Update ()
Assets/CameraFollow.cs:9
つまり CameraFollowスクリプトが原因です。
おそらくコードはこうなっています👇
でも プレイヤーがゲームオーバーで Destroy されるので
Destroy(gameObject);
↓
player が存在しない
↓
CameraFollow が player.position を読もうとする
↓
エラー
になります。
解決方法(簡単)
CameraFollow をこう直します👇
これで
player が消えたら
↓
カメラは何もしない
↓
エラー出ない
になります。
次の記事
www.momino1234.com