質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

5832閲覧

プレイヤーにスタミナの要素を追加したい

nine_fish397

総合スコア8

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/01/01 15:23

編集2021/01/07 09:41

UnityのSlider を使ってスタミナ機能を作ろうとしています。画面をクリックするとプレイヤーはジャンプするのですが、その際にスタミナのゲージが減少し、0以下の場合一定時間経過しないと再度ジャンプできないような仕様で作りたいと思っています。
色々なサイトを参考にして、画面をクリックするとスタミナのゲージが減る仕組みは作れたのですが、ゲージが0以下になった時にプレイヤーがジャンプできない仕様にすることができずにいます。どうすればゲージとプレイヤーを連動させることができますか?
お暇があれば助言をいただきたいです。

追記1/7 プレイヤー側の方でSliderの管理をすることでスタミナゲージをジャンプの時に減らすことができました。助言をしてくださった方々、本当にありがとうございます。あと、上記の通りプレイヤーがのスタミナが0になったらジャンプの動作を受け付けないようにし、一定時間でスタミナの回復を行いたいのですが、どのような手段で行えばいいか助言をいただきたいです。

プレイヤー側のコード public class PlayerControll : MonoBehaviour { public float Hp = 100f;//スタミナ public Slider _slider;//新規追加 public GameObject slider;//新規追加 //スプライト番号 const int SPR_FALL = 0; const int SPR_JUMP = 1; [SerializeField] float Jump = 400;//ジャンプ力 public Sprite[] SPR_LIST;//アニメーション用スプライトの保持 public GameObject gameMgr;//ゲーム管理 public Rigidbody2D _rigidbody;//物理挙動 SpriteRenderer _renderer;//スプライト描画 GameMgr _gameMgr;//ゲーム管理スクリプト // Start is called before the first frame update void Start() { _rigidbody = GetComponent<Rigidbody2D>();//物理挙動のコンポーネント獲得 _renderer = GetComponent<SpriteRenderer>();//スプライト描画コンポーネント獲得 _gameMgr = gameMgr.GetComponent<GameMgr>();//ゲーム管理スクリプトを取得 _slider = slider.GetComponent<Slider>();//新規追加 _slider.value = hp;//新規追加 } // Update is called once per frame void Update() { if (Input.GetMouseButtonDown(0)) { GetComponent<AudioSource>().Play(); _rigidbody.velocity = Vector2.zero;//落下速度を一度リセット _rigidbody.AddForce(new Vector2(0, Jump));//上方向の力 _slider.value -= 10f; //新規追加 } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

画面をクリックしたときに、そのスタミナの値をチェックして、0以下ならその後の動作を行わないようにすればいいです。

投稿2021/01/02 01:18

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nine_fish397

2021/01/02 06:24

スタミナの値をチェックする方法や動作を行わないようにはどのようにすればいいのでしょうか。それらはプレイヤー側のscriptに書くのでしょうか。
legohasiri

2021/01/03 18:22

slider側がhpを管理しているから訳分らんのです。 hpはplayer側で管理して、sliderはplayerの値を参照するようにしたらわかりやすくなるかと。 playerが持つべきものはちゃんとplayerに持たせましょう。
nine_fish397

2021/01/04 14:06

ありがとうございます。プレイヤー側にhpを追加してSliderは編集した上記のscriptに直しました。 ただ、「NullReferenceException: Object reference not set to an instance of an object」 というエラーが出てしまってうまくいきません。 調べてみると、オブジェクトにアクセスができないらしいのですがどうしてでしょうか。
退会済みユーザー

退会済みユーザー

2021/01/07 04:01

横から失礼します。 エラー文が分かっても、エラー箇所(コードの何行部分とか)が分からないとコメントしづらいかと思います。 [ エラーとは関係ないですが ] Slider用のスクリプトを用意したいのであれば、マウスのクリック判定はPlayerControll内でのみ行い、イベント発生時にSutaminaBarを参照してsliderの値だけを更新する方がいいかと。(自分も初心者なので参考までに) そもそも、自分だったらPlayerControll内でsliderを管理する方がいいかも、って思っちゃいます。
nine_fish397

2021/01/07 09:45

プレイヤー側でSliderの管理をすることでエラーなく連動できました。一応追記の方でも書いたのですが、スタミナ0の場合ジャンプができない仕様にするのと、一定時間毎にスタミナが回復する仕様のいい方法があれば助言の方を頂きたいと思っています。ありがとうございました。
fiveHundred

2021/01/07 09:55

スタミナをPlayer側に持たせたのであれば、それをif文で0以下かどうかをチェックしたり、一定時間毎にそれを加算すればいいだけの話です。 いずれも簡単な内容だと思いますが、何が分からないのでしょうか?
nine_fish397

2021/01/07 10:11

すればいいだけの簡単な話を数日間に渡って引っ張って、恥も外聞もなく質問してしまって上に、わかりずらい質問で回答者様お手間をとらせてしまって申し訳ございません。if文で0以下の時にチェックするのはわかるんですが、クリックする動作を無効にする方法がわからないです。
fiveHundred

2021/01/07 10:20

逆に「スタミナが0より大きいのであれば処理する」と考えればよろしいかと思います。
nine_fish397

2021/01/07 10:47

おかげさまで0になった時のペナルティーができました。時間経過毎スタミナを回復する処理も自力で解決できたのでやっと完成しました。本当にありがとうございました。
guest

0

自己解決

void Update()
{
if (_slider.value >0)
{
if (Input.GetMouseButtonDown(0))
{
GetComponent<AudioSource>().Play();
_rigidbody.velocity = Vector2.zero;//落下速度を一度リセット
_rigidbody.AddForce(new Vector2(0, Jump));//上方向の力

_slider.value -= 10f; } seconds += Time.deltaTime; if (seconds >= 2) { _slider.value += 10f; seconds = 0; Debug.Log("回復した"); } } }

と記述してスタミナ回復とスタミナが0の時のペナルティーを実装できました

投稿2021/01/07 10:49

nine_fish397

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問