![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
unityで以下のC#プログラムをどう組み立てていいのかわからず質問いたしました。みなさまの知恵をお貸しください。
今現在↓のプログラムで実現できている段階が、PC上のキーボード(Vキー)を押し続けている間はキャラクターがboost機能を使えるというものです。(これによりキャラの動きが速くなったりします)
ただずっとVキーを押しつづけるのは正直めんどくさいので、これを、Vキーを一度押すだけでboostPoint(エネルギータンク)がなくなるまではboost機能がずっと発動し続け、また途中でやめたい場合は同じVキーを押すとそこでboost機能を停止できるというプログラムを実現したいと思っています。
※別にVキーにこだわっているわけではないので他の方法で実現できるならそれでもOKです。
3日ほど悩んで1人では解決できないと思い投稿いたしました。C#とunity歴はまだ3週間ほどで知識もまだまだでC#に変な所があるかもしれませんがご教授宜しくお願いします。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class CharactorController : MonoBehaviour
{
public int boostPoint;
int boostPointMax = 2000;
public float speed = 3.0f;
public float gravity = 9.81f;
//Sliderを入れる
public Text bpText;
//Sliderを入れる
public Slider slider;
private Vector3 moveDirection = Vector3.zero;
CharacterController controller;
void Start()
{
controller = GetComponent<CharacterController>();
//Sliderをスタート時に満タンにする
slider.value = 1;
//boostPointをスタート時に満タンにする
boostPoint = boostPointMax;
}
void Update()
{
if (controller.isGrounded)
{
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
if (Input.GetKey(KeyCode.Space))
{
moveDirection.y = 5; //ジャンプするベクトルの代入
}
if (Input.GetKey(KeyCode.V) && boostPoint > 0)
{
moveDirection.x *= 3;
boostPoint -= 4;
slider.value = (float)boostPoint / (float)boostPointMax;
}
}
if (Input.GetKey(KeyCode.V) == false)//Vキーが押されていない場合はブーストポイントに+1づつ与え回復させる
{
boostPoint += 1;
slider.value = (float)boostPoint / (float)boostPointMax;
}
boostPoint = Mathf.Clamp(boostPoint, 0, boostPointMax);//Mathf.Clampでブーストポイントの残量を現在のboostPointへ代入する
moveDirection.y -= gravity * Time.deltaTime;
controller.Move(moveDirection * Time.deltaTime);
//現在の体力と最大体力をUIに表示
bpText.text = string.Format("{0:000} / {1:000}", boostPoint, boostPointMax);
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vc++ 2005 Pictureboxの透過処理
-
C#で、あるクラスのメンバーす...
-
ボタンの複数割り当てについて
-
C#でのWNetAddConnection3の使...
-
コンボボックスを使う時の警告
-
C#でのDLLのメソッドの作り方
-
Junitテストでvoid戻り値メッソ...
-
JWindow、JFrameでモーダル化の...
-
数独の問題作成
-
アプレットでマウスイベントが...
-
【C#】ハッシュテーブル(連想...
-
オブジェクトの中のプロパティ...
-
IF関数でEmpty値を設定する方法。
-
javaで質問です。 文字列2023/2...
-
カタカナの小文字を大文字に変...
-
分を表す数値(int型)を、小数...
-
ページング
-
ループ処理の際、最後だけ","を...
-
ArrayListの要素数の上限
-
配列にnullを代入すると、null...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大量のデータを読み込んで表示...
-
C#で、あるクラスのメンバーす...
-
ボタンの複数割り当てについて
-
Junitテストでvoid戻り値メッソ...
-
C#でのWNetAddConnection3の使...
-
C# visibleプロパティをfalseに...
-
ボタンのイベントで異なるウィ...
-
C# DataGridView列カスタマイズ
-
C# 矢印キーの取得
-
Processingでマウスクリックで...
-
[C#.net]スレッド化された別フ...
-
C#で別のFormへ複数の値を返そ...
-
C# WinForm のDataGridView Cel...
-
テキストフィールドに入力した...
-
【C#】ソースコードをファイル...
-
C#から、C++で作成したdll内の...
-
C# 半角カナの文字化けについて
-
C# タスクバーを隠したフォーム...
-
文字列の置換
-
エンターキーを押すとOKボタン...
おすすめ情報