前提・実現したいこと
現在Unityで物を投げ合うゲームを作ろうとしています。実現したいことは、アイテムを持つまでの時間をアイテム毎にカウントされている様子を画面上に表示することです。
発生している問題
アイテムによって決められた秒数待つと、持つことができます。しかし、プレイヤーは何秒待てばいいのかわからないので、持つと同時に画面に秒数を表示したいと思っています。下記のプログラムですとアイテムごとに設定した秒数を参照することはでき、表示するところまではできるのですが、カウントが始まらず、数字がバグったかのように上下に揺れ始め、設定した秒数待つとカウントが始まります。
該当のソースコード
PlayerController.script→プレイヤー側に付けるスクリプト
bool canGrab; //アイテムを持っているかどうか
bool isCountdownStart; //カウントダウンが始まったかどうか
public float count; //持つまでの時間
public Text countText; //UIを入れとく変数
void Update(){
Ray ray = new Ray(transform.position+new Vector3(0,0.15f,0) , transform.forward);
RaycastHit hit; if (Physics.Raycast(ray, out hit, distance)) { if (hit.transform.tag == "item") { currentItem = hit.transform.gameObject; canGrab = true; holdTime = hit.collider.gameObject.GetComponent<pickUp>().HTime; count = hit.collider.gameObject.GetComponent<pickUp>().CountTime; //countの値にpickUpスクリプトのCountTimeの値を代入する } } else canGrab = false;
if (canGrab)
{
if (Input.GetKeyDown(KeyCode.E))
{
Invoke("PickUp", holdTime);
isCountdownStart = true;
countText.gameObject.SetActive(true);
}
}
if (isCountdownStart)
{
count-= Time.deltaTime;
countText.text = count.ToString("f2");
}
if (count < 0)
{
count = 3;
countText.gameObject.SetActive(false);
isCountdownStart = false;
}
}
PickUp.script→アイテムがに付けるスクリプト
public float HTime; //アイテムを持つまでの時間
public float CountTime; //アイテムを持つまでの時間。UnityのInspectorでアイテムごとに設定できるようにする
試したこと
表示する秒数(count)と待つ時間(holdTime)の値は同じなので、最初はholdTime-=Time.deltaTimeでできるのかなと思っていたのですが、同じように数字がフリーズしてしまい、決められた秒数待つとカウントが始まってしまいました。だったら、上記のプログラムのように別で追加したらできるのかなと思ったのでやってみたのですが、できませんでした。どうすればよいでしょうか?どなたか教えてください。
補足情報(FW/ツールのバージョンなど)
Unityのバージョンは2019.4.3f1
他に足りない情報があれば教えてください
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。