デジタルな日々

UnityでFFっぽいものを作る3(UI制御)


 

前 UnityでFFっぽいものを作る2(uGUI設置)

 

まずGameObject > CreateEmpty で空のゲームオブジェクトを作ってゲーム全体を管理するGameManagerバトル部分を管理するBattleManagerを作る、まあ名前はなんでもいいけど

 

2つに分けたのはいずれフィールド部分のシーンも作って組み合わせたいという野望である。
なのでGameManagerはシーン遷移しても消えないようになるやつ(書き方はわすれた)を使ってステータスを管理するようにした。

 

 

UnityFFUI部分

 

左の青い丸はATBゲージで時間経過でぐるっと丸まるようになっている。
文字はUIText。HPMPゲージの後ろの背景はちょっと暗くして半透明にしている。

 

 

これらGUIの制御は全部BatteManagerで行う、ATBゲージの値も使って処理を行うようにする。

 

BattleManage(BattleManager)

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

「using UnityEngine.UI;」を記述しておかないとUIのコンポーネントをいじれないので注意!!

public class BattleManage : MonoBehaviour {

public string command_chara =””;

public GameObject GameManager;
private GameManage GM;

public GameObject ATBbar;
public float ATBspeed = 0.3f;

public GameObject HPbar;
public GameObject MPbar;
public GameObject HPMPGUI;

今回からスクリプトの分量を減らすため「GameObject.Find(“hogehoge”)」を使わずに「public」にしてインスペクター上でぺたっと貼るようにした。どっちのほうがいいんだろうね。

void Start () {
GM = GameManager.GetComponent();
}

ゲームオブジェクトの「GameManager」に「GameManage」というスクリプトが付いている。すごくわかりにくくてあとで後悔した。

void Update () {

if(ATBbar.GetComponent().fillAmount != 1f) {
ATBbar.GetComponent().fillAmount += Time.deltaTime * ATBspeed;
}

HPbar.GetComponent().fillAmount = (float)GM.unitychanST.HP / (float)GM.unitychanST.maxHP;
MPbar.GetComponent().fillAmount = (float)GM.unitychanST.MP / (float)GM.unitychanST.maxMP;

HPMPGUI.GetComponent().text = “ユニティちゃん HP ” + GM.unitychanST.HP + ” / ” + GM.unitychanST.maxHP + “\n\t\t\t\tMP ” + GM.unitychanST.MP + ” / ” + GM.unitychanST.maxMP;
}

UI.Imageには「fillAmount」というコンポーネントがあってこれが滅茶苦茶便利!

UIimage

ImageTypeを「filled」にすると使える。「fillMethod」で縦横だけなじゃくて円形のゲージなども作ることが可能!
fillAmountバーをいじるとどんな感じに変化するか見られる。fillAmountは0~1の値が入る。

 

※テクスチャをつけるときはテクスチャ自体の設定で「SpriteMode」を「Sprite 2D and UI」にしておく

 

えーと、上のスクリプトの話戻ると

 

「ATBbar.GetComponent().fillAmount」でfillAmountを取得!
1じゃなければ時間分増加させる!という感じ

 

今までのGUIとは参照方法がちょっとちがうので注意!(「using UnityEngine.UI;」も忘れずに)

 

Textも同じようにして変更。改行できるのでありがたい

 

public void OnCommandClick (int num) {
command_chara = GM.unitychanST.name;
Debug.Log(num + “番のコマンドが押されました”);
}
}

最後にボタンが押された時の関数を用意しておく。ちなみにGameManagerには構造体でキャラのステータスを作っていて、ここではその中の「unitychan」の「name」を取得している(後々パーティが増えた時にキャラが区別できるようにするため)

 

ボタン側からの処理はなんとインスペクター上から設定できる

 

UIButtonインスペクター

 

この「OnClick」の欄でゲームオブジェクトやスクリプトをセットして、関数・引数などを設定する。

 

 

 

BattleManagerはとりあえずここまで

 

 

GameManagerのほうはこんだけ!

 

GameManage(GameManager)

using UnityEngine;
using System.Collections;

public class GameManage : MonoBehaviour {

// ステータスの構造体
public struct status {

public string name;
public int maxHP;
public int HP;
public int maxMP;
public int MP;

}

public status unitychanST;

void Start () {

// ユニティちゃんのステータス設定
unitychanST = new status();
unitychanST.name = “unitychan”;
unitychanST.maxHP = 1000;
unitychanST.HP = unitychanST.maxHP;
unitychanST.HP = 700; // デバッグ用
unitychanST.maxMP = 200;
unitychanST.MP = unitychanST.maxMP;
unitychanST.MP = 100; // デバッグ用

//Debug.Log(unitychanST.name);
}

void Update () {

}
}

構造体作ってステータスを設定してます。フィールド面とか作ったらシーン遷移しても消えないようにしてゲーム全体の管理をさせる予定…

 

 

次はいよいよユニティちゃんを攻撃させるぞお!!

 

 

ユニティちゃんライセンス

このコンテンツは、『ユニティちゃんライセンス』で提供されています

コメントを残す