前回:http://qiita.com/muzudho1/items/44e66663be3323e556c9
この画面に 6つのものを置いていきたい。
- ダッシュ・ボタン
- タックル・ボタン
- メニュー・ボタン
- HPゲージ
- スペシャル・ゲージ
- スコア
HPゲージ、スペシャルゲージは 黒、赤、黄のタイルを引き延ばして使うか。
スコアは テキスト表示でいいのではないか。
この中で一番実装が簡単なのは スコア だろうか。ひよこのたまごに解説がある。
スコアの表示を置く
「【Unity開発1】uGUI(Text)でスコアを表示!【ユニティちゃん縦スクロール5】」ひよこのたまご
http://hiyotama.hatenablog.com/entry/2015/04/27/060000
数字を設定するスクリプトは 後回しにしよう。
タップボタンを置く
「Unityでタップ処理を実装する|動画あり」クリアメモリ
http://www.clrmemory.com/unity/use-tap-function/
ボタンは UI の画像じゃなくて スプライトとして置いた方がいいのか?
2Dオブジェクトのスプライトとして ゲームオブジェクトを配置すると
小さくなりすぎてしまう。
素直に UI の Button を置くのが良さそうだが、スクリプトで制御できるだおるか?
ただ置くだけなら 画面端をアンカーにして TransformのPos X, Pos Y にプラスマイナスを入れて相対位置を指定して できるが……。
スクリプトを付けるのは後回しにして 次は バーを置いてみたい。
バーを置く
ひよこのたまごを参考にする。
「【Unity1】ボタン長押しでゲージ(uGUIのImage)を溜め、ジャンプ力アップ!【ユニティちゃん縦スクロール9】」
http://hiyotama.hatenablog.com/entry/2015/04/28/140000
バーを置くだけなら こんな感じだが。
UI 関係は UI のゲームオブジェクトを Canvasの下に置くのがいいのか。
ジャンプボタンを実装できるだろうか?
2Dコライダーで当たり判定を付けるといいらしい。
サークル・コライダーは 楕円にできない。
カプセル・コライダーは カプセル型だ。
ポリゴン・コライダーは 線を引くのが大変すぎる。
レイキャストで 当たってくれないものか?
「RayCastその4、Raycastを2Dで使う【Unity】」(:3[kanのメモ帳]
http://kan-kikuchi.hatenablog.com/entry/RayCast4
ボタンの形ではなく、矩形で当たってしまうようだが、
画面をタップする用途はボタンを押すことなのだから、問題ないだろう。
Canvasに置いた UI は UIレイヤーに設定されているので、
//レイヤーマスク作成
int layerMask = LayerMask.NameToLayer("UI");
と書いてみる。
レイキャストを飛ばすかどうかより、ボタンだから そもそも タップできるのでは?
「uGUI ボタンのクリックイベントを取得する」
http://qiita.com/norioc/items/f9820e90c74d9dce7f89
ボタンごとにクラス・ファイルを作るか?
設計図の書き直しになって大変だ。
using UnityEngine;
public class JumpButton : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
public void OnClick()
{
Debug.Log("ジャンプボタンをクリックした");
}
}
ドラッグ&ドロップするというのが 分かりにくい。
反応するようだ。これでいいか。
バーのスクリプトを調べよう
また ひよこのたまごに戻る。
「【Unity1】ボタン長押しでゲージ(uGUIのImage)を溜め、ジャンプ力アップ!【ユニティちゃん縦スクロール9】」
http://hiyotama.hatenablog.com/entry/2015/04/28/140000
Rect Triangle コンポーネントの width を増減させることで バーを表現しているらしい。
今は 400 px だが、HP は例えば 0 ~ 100 のように別に持っておいて
width は 4 倍するみたいなコードがいるかもしれない。
- Width
Unityエディター上で バーを配置したわけだが、
ゲーム開始時に もともとの Width は width_cache プロパティに退避するなどして、バーは 伸びたり縮んだりするようにする。
全体は省くが、
// Update is called once per frame
void Update () {
#region テスト・コード
// とりあえず、どんどんメーターが減っていくコードを書いてみる。
if (0<rectTransform_cache.sizeDelta.x)
{
rectTransform_cache.sizeDelta = new Vector2(rectTransform_cache.sizeDelta.x - 1.0f, rectTransform_cache.sizeDelta.y);
}
#endregion
}
こう書いてしまうと 不便だ。HPと、バーの長さは別だ。
全部は載せないが、
// Update is called once per frame
void Update () {
#region テスト・コード
// とりあえず、どんどんメーターが減っていくコードを書いてみる。
if (0<value)
{
Add(-1);
}
#endregion
// 内部データと表示データが合っていない場合、表示データを更新する
if (dirty)
{
rectTransform_cache.sizeDelta = new Vector2(rectTransform_cache.sizeDelta.x * value / maxValue, rectTransform_cache.sizeDelta.y);
dirty = false; // (2017-06-15 Add)忘れていたので追記
}
}
増減したいのは HP なはずで、バーの長さではないはずだ。
まあ、バーが動くということが分かればいいか。
バーの減りが 加速的でなんかおかしいな。
if (dirty)
{
rectTransform_cache.sizeDelta = new Vector2(widthMax_cache * value / maxValue, rectTransform_cache.sizeDelta.y);
dirty = false; // (2017-06-15 Add)忘れていたので追記
}
こうなんじゃないか。
加速度がかかってない。やっぱりこうだ。
スコアも動くようにしよう
ひよこのたまご も読み直す。
「【Unity開発1】uGUI(Text)でスコアを表示!【ユニティちゃん縦スクロール5】」ひよこのたまご
http://hiyotama.hatenablog.com/entry/2015/04/27/060000
バーが作れるなら スコアも考え方は同じだな。
width を変えるか text を変えるかぐらいの違いで。
ジャンプボタンも動くようにしよう
どうやったらジャンプするのか?
プレイヤーの Rigidbody2D.Y に数字を増やしておけば飛んでくれるが。
ここで画像アップロード容量上限。
これが出てくると、どう対応するのがいいのか。
「Qiita初投稿時、のエラーがよく出る」
http://qiita.com/genshun9/items/9e54325bf2dd3de2f99f
この人は そのルールをどこで知ったんだ?
「初めてQiitaに投稿すると1ヶ月の画像アップロード制限が2MB→100MBにアップします」
http://blog.qiita.com/post/75674629515/image-capacity-expansion
すると 100M とかすぐ行ってしまうなあ。
自分のブログで続けるしかないか。
ジャンプボタンはできた。
まとめ
これ以上の作業は 提出が間に合わなくなるので、今週分の作業をまとめることにする。
設計書を作ること が要件にあるので作る。
- HpBar クラス追加
- JumpButton クラス追加
- MenuButton クラス追加
- Score クラス追加
- SpecialBar クラス追加
- TackleButton クラス追加
PlantUML図は 1枚の大きな画像にすると収まらないので分割する。
設計図_クラス図(分割3b).pu
→H,J,M,Pへ。
設計図_クラス図(分割3S)_0616.pu
→SとTへ。
画像が載らない。他の記事を削除しないと
ダメか。
まず Git Hub にソースを上げる。
.gitignore ファイルで Libraryフォルダーを弾いているつもりなんだが、
キャッシュ・ファイルをアップロードしようとしてしまう。
手作業で削除。