LoginSignup
1
3

More than 5 years have passed since last update.

スタミナの機能を追加

Posted at

スタミナ機能の追加について

今回はsliderを使ったスタミナの機能の追加をしていきたいと思います。

1.下準備

まず、左上のGameObject→UI→Sliderでスタミナを表示するSliderを生成・配置します。

bandicam 2018-08-03 15-45-10-496.jpg

おそらくこうなります。

次にFillを選択し、スタミナの色をお好みで変更してください。(黄色や緑色がオススメです)

bandicam 2018-08-03 15-45-24-293.jpg

次にHandleを選択し、スタミナのつまみのような部分の色をお好みで変更してください。(白色(変更をしない)がオススメです)

bandicam 2018-08-03 17-50-54-928.jpg

これでとりあえずは完了です。

2.スタミナのScriptを書こう

ここからScriptを書いていきます。

まず、ProjectのCreateからC#Scriptを作成して、適当な名前をつけましょう。(例:sutaminaBar、SutaminaScript)

次に作成したScriptに書いていきます。

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

public class sutaminaBar : MonoBehaviour {
    public float speed = 5.0f;
    public Slider slider;
    Animator animator;
    UIScript uiscript;

    // Use this for initialization
    void Start () {
        slider = GameObject.Find("Slider").GetComponent<Slider>();
        animator = GetComponent <Animator> ();
        uiscript = GameObject.Find ("Canvas").GetComponent<UIScript> ();
    }

    // Update is called once per frame
    void Update () {
        if (Input.GetKey (KeyCode.Space)) {
            PlayerScript.sutamina = PlayerScript.sutamina + (Time.deltaTime / 2);
        }
        //スタミナが0以上の時
        if (PlayerScript.sutamina > 0) {
            //スタミナが徐々に減る
            PlayerScript.sutamina = PlayerScript.sutamina - (Time.deltaTime / 15);
        }
        if (PlayerScript.sutamina < 0) {
            speed = 0;
            animator.SetBool ("DEAD", true);
            uiscript.Gameover ();
            Debug.Log ("taoreta");
        }
        if (PlayerScript.sutamina > 1) {
            PlayerScript.sutamina = 1;
        }
        Debug.Log (PlayerScript.sutamina);

        //スタミナとvalueをつなげる
        //スタミナをスライダーに反映させる処理
        slider.value = PlayerScript.sutamina;
    }
}

1.
using UnityEngine.UI;
 
で、UIを使えるようにしている

2.
public float speed = 5.0f;
  public Slider slider;
  Animator animator;
  UIScript uiscript;

  で、これから使うものの宣言をしている

3.
slider = GameObject.Find("Slider").GetComponent<Slider>();
animator = GetComponent <Animator> ();
uiscript = GameObject.Find ("Canvas").GetComponent<UIScript> ();

で、GameObjectを探して変数に代入、Componentを追加している

4.
if (Input.GetKey (KeyCode.Space)) {
   PlayerScript.sutamina = PlayerScript.sutamina + (Time.deltaTime / 2);
}
で、指定したキーボードを押すと(今回はスペースキー)、スタミナを(時間経過÷2で)回復させている

5.
if (PlayerScript.sutamina > 0) {
   PlayerScript.sutamina = PlayerScript.sutamina - (Time.deltaTime / 15);
  }
で、スタミナが0以上の時に、スタミナを(時間経過÷15で)減少させている

6.
if (PlayerScript.sutamina < 0) {
   speed = 0;
   animator.SetBool ("DEAD", true);
   uiscript.Gameover ();
}
で、スタミナが0以下になった時の諸々の処理をしている

7.
if (PlayerScript.sutamina > 1) {
   PlayerScript.sutamina = 1;
}
で、スタミナが1以上になった時に、スタミナを1いする処理(これがないと、スタミナが1以上まで行ってしまい、Sliderに表示できなくなってしまうため)をしている

8.
slider.value = PlayerScript.sutamina;

で、スタミナをSliderに反映させている

*Scriptに時々入っているDebug.Log(~)というのは、確認のためにいれているので直接Scriptには影響しない。(ConsoleでDebug.Log内に入力したものを随時確認しながら動作を確認できるので便利)

3.最後に

Scriptがかけたら、SliderにそのScriptを入れましょう。

bandicam 2018-08-03 17-51-04-470.jpg

このようにできたら完了です。お疲れ様です。

4.さらに

ここまでできると基本的なスタミナの機能は完成しているのですが、さらにアレンジしたい人向けに自分がやった・考えたアレンジをいくつか紹介しておこうと思います。

・スタミナを回復するアイテムを作る
→ヒント:新しいアイテム用のScriptを作り、当たった時の処理を書けば良い(アタッチメントすること)
・・・
if (hit.CompareTag ("player")) {
   PlayerScript.sutamina = PlayerScript.sutamina + 1;
   Destroy (gameObject);
}
...
・ジャンプをした時に一定量スタミナを消費する
→ヒント:Playerを動かしているScriptの中からジャンプする際に押すキーを確認し、スタミナを管理しているScriptにさっき確認したキーを押した時に一定量消費するようにすれば良い
・・・
if (Input.ジャンプするキーを打ち込む) {
   PlayerScript.sutamina = PlayerScript.sutamina - 0.3f;
...

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3