やっと完成unity 敵にHPバー(体力ゲージ)を実装するぞ

HPバーを実装していきます(スクリプト間変数やりとり使用)

攻撃を受けた時、ダメージを受けます、その減り具合を一目でわかるようにゲージを敵キャラの上につけていきます。

今回のテーマは、スクリプト間で変数を参照することです

目次
1全体の流れ
今回の概要です
2敵キャラ(Cube)にHP表示をくっつける(見た目)
まずは、見た目を整えていきます。
3さっそくスクリプトを貼ります
苦労しました。
4何をおこなっているのか説明
苦労したのに、コードは、かなり少ない
いいことでは、あるのですが
5ひとつづつ解説
がんばりました、スクリプト間での変数のやり取りを
覚えたのが今回のかなりの収穫です
6まとめ

このページ作った時に買ったものではないですが、僕の買ったやつの2019版ですかね、どうせ買うなら、最新版、自分の使ってるunityのバージョンと合わせて買いましょう、安心ですよ※このページの内容が丸ごと乗っているわけではないです、この本プラスネット検索が大事かもです、でも1冊以上は、買ったほうがいいかもですので、おすすめのやつを紹介

1全体の流れ

今回難しそうなのは、変数をスクリプト間でやり取りするところ

まずは、ヒエラルキーでcanvasを作成それにスライダーを付けて敵オブジェクトの子にする

3Dだから常にカメラに向いてもらう

体力設定も作る

攻撃(別のページで、インターフェースを使ってやったよ、興味がある方は、カテゴリからどうぞー)

ダメージに合わせてゲージ(スライダーを動かす)

 

ページ内のもくじへ

2.敵キャラにHP表示をくっつける

まだみためだけですが、敵キャラ(cube)をつくり、ヒエラルキーのところでcreate,ui,sliderと選択していきスライダーを作り、名前は、それぞれhpcanvas,hpsliderにしました。

canvasが設置する領域

sliderが全体

backgroundがスライダーの背景(体力がないときに見える背景)

fill area

fillが体力自体としてつかいます

Handle Slide Area これは、体力ゲージには、いらないから消します(マウスでクリックしてスライダーを操作するあれです)

hpcanvasの設定

そして敵キャラの上に配置しようとしたら動かないインスペクターのところでhpcanvasの設定項目のRender Modeをworld spaceにしたら動かせるようになりました(これは、UIを動かしたいときに設定するものらしいです)好みで敵キャラとスライダーの位置、サイズを設定してください。僕の場合は、下の項目もいじりながら戻って調整戻って調整でかなり大変でした

hpsliderの設定

インスペクターのsliderscliptのdirectionの項目でスライドの方向を変えれるみたいです、僕は、left to rightを選びました

backgroundの設定

hpsliderの子要素に最初からあるはずなので、そこを開いて設定していきます。スライダーの背景らしいです、インスペクターのImage(script)の項目のsource imageでnoneを選択すると四角になるみたいです、僕は、これにします。colorは赤にしました

いつかは、デザインしたかっこいいやつ使ってみたいです

Fill areaの設定

recttransformの値だけ変更します、数値は、あとで何個かまとめてかきます

Fillの設定

Fill areaの子要素にあります、開いて設定していきます、

Image(script)の項目のsource imageでnoneを選択しcolorを好みの色にします僕は、緑にしました

backgroundとFill areaとFillの値の設定

それぞれのインスペクター内のRect transformは、たぶん統一がいいと思います。

まだ詳しくないのでどれがどれかわからないのですがCanvasが親に指定されてるのであればそれを基準にされるのだと思います

Rect transform内の

left top pos Z

Right Bottom

この5つのあたいは、backgroundとFill areaとFillで統一しといたほうがいいかも

この3つ×5つの値ぼくは、全部0にしました

たぶんですがスライダーのサイズで調整するほうが楽だと思ったからです

 

ページ内のもくじへ

3スクリプトをはります

スライダーをいじるためのスクリプト

スライダーをくっつけているCanvasにスクリプトをアタッチします。

どこにアタッチするのが適切か実は、わかってないですが、Canvasにアタッチしておけば動きました

たぶんスクリプト内の親子関係の記述をもうちょい勉強しなきゃ(新しい課題です)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;       //これ忘れないよう注意

public class tekihp_03 : MonoBehaviour {
    private hakoste_02 hakosteyou;  //hakoste_02(前に作った敵キャラのスクリプトです
                                    //たぶんこうやって宣言したらそこにある変数を使える?
    private Slider hpslider;       //スライダーを動かすための宣言 hpsliderというものを作りました

 // Use this for initialization
 void Start () {
        //敵のHPの値を参照するための儀式です
        //hakoste_02(敵のステータス管理用に作ったスクリプトです)
        //tranform.root これをやるとヒエラルキー上での親子かんでやりとりができるらしいです
        //それを指定しそこにあるhakoste_02をゲットコンポーネントします
        hakosteyou = transform.root.GetComponent<hakoste_02>();

        //transform.Find("")でスライダーの名前指定で探します
        //たぶんtransform.Find  transform.root はオブジェクトが親子関係の時使えるものです
        //上で宣言したスライダー用の箱(hpslider)にSliderの機能をゲットコンポーネントします
        //今回スライダーの名前は、いじってないのでSliderのままです、必要に応じて名前かえてもいいかも
        hpslider = transform.Find("Slider").GetComponent<Slider>();
  
 }
   
 
 // Update is called once per frame
 void Update () {

        hpslider.value = hakosteyou.hako_hp;
 }
}

実際僕が試行錯誤しながら意味を調べながらコメントを書いていきましたが、見にくかったので、必要なやつを赤文字にしました

敵オブジェクトにアタッチしているスクリプト

今回の関係している部分だけ、貼り付けます

ファイル名は、hakoste_02.csと名付けてあります。

 public int hako_hp = 100;

 

ページ内のもくじへ

4.スクリプトのながれ

スライダーを動作させるための宣言

敵キャラのhpを管理しているスクリプトにアクセスするための宣言

取得してきたhpをスライダーに反映

たったこれだけなのですが理解するのにかなり大変でした

ページ内のもくじへ

5スクリプトの解説

using UnityEngine.UI;

using ~~が並んでるところにこれを書いておけばUI今回は、スライダーがいじれるようになります、おまじないなので、忘れないよう書きましょう

private hakoste_02 hakosteyou;

これこれ、今回苦労したところの一つですhakoste_02(僕が敵キャラ用に作ったスクリプトの名前です)

スクリプトの中の変数を参照するために必要なので宣言しました

private Slider hpslider;

スライダーを操作するためにhpsliderという名前で作りました

宣言しといてください

hakosteyou = transform.root.GetComponent<hakoste_02>();

今回苦労したところパート2です

どうやったらほかのスクリプトの変数を参照できるか大変でした

transform.rootこれがたぶん親子関係で探し出すやつ

hakosteyou(さっき宣言した奴)これにゲットコンポーネントでhakoste_02の中身を参照できるようになりました、たぶんほかにもこの中に入っているいろいろなものをいろいろなことに使えるらしいですが、まだ勉強してないので

hpslider = transform.Find(“Slider”).GetComponent<Slider>();

上のと似てますが今度は、Find使って名前で探してみましたそしてゲットコンポーネント<Slider>はたぶんunityが準備してある機能です

hpslider.value = hakosteyou.hako_hp;

今回苦労したところパート3です

さっき宣言したhpslider(Sliderの機能を使えるようにしたやつ)にhakosteyou(ゲットコンポーネントしてhakoste_02.csにアクセスできるようにしたやつ)からhpを持ってきてvalueを変えればスライダーが動きます

hpslider.value こう書くことでhpsliderのvalue(スライダーの機能value)を変えることができます。

hakosteyou.hpこう書くことでhakosteyou(hakoste_02.csにアクセスできるようになっている)の中にあるhp(public int hako_hp = 100; hakoste_02.csでこういう風に宣言してあります)を参照できます

update()に書いてあるのでhako_hpを毎回参照してその数値を代入してスライダーを動かすことができるようになりました。

 

 

ページ内のもくじへ

6まとめ

こんかいスクリプト親子関係にあるものだけを参照しあうやり方を覚えました

いろんな使い方ができそうです

宣言してそのはこに探してゲットコンポーネントです

きになるのは、親子関係にないファイルを呼び出すやり方がインターフェースを使ったやり方しかわかりません(transform. を使えるのがルート(親子関係をこういうらしい)関係だけなのかも実験してみたいです

もしかしたらfind系を使えばいけるのか?まだまだいろいろがんばっておぼえていきます

まちがってるところ、こうやったらもっと簡単に書けるよとかあれば、教えてください、まってまーす

ちょっとこれつかえるかも?GameObject.Find( “名前” );今度実験してみます

ページ内のもくじへ

コメント

タイトルとURLをコピーしました