Question by
FabianBlaha · Sep 06, 2017 at 05:09 PM ·
uislidermathf.lerp
Mathf.Lerp with UI Slider to show reload time.
Hi!
I'm just about finished with the TANKS! tutorial, and wanted to add a few things to the TankShooting script. First I added a 1 second cooldown to the tank shots, but without any visual indication. Now I want to add a slider to visually represent this reload time. I have the slider UI as a child in the prefab canvas, and it works, but only for the first shot.
using UnityEngine;
using UnityEngine.UI;
public class TankShooting : MonoBehaviour
{
public int m_PlayerNumber = 1;
public Rigidbody m_Shell;
public Transform m_FireTransform;
public Slider m_AimSlider;
public Slider m_ReloadSlider;
public AudioSource m_ShootingAudio;
public AudioClip m_ChargingClip;
public AudioClip m_FireClip;
public float timeBetweenShells = 1f;
public float minReload = 0f;
public float m_MinLaunchForce = 15f;
public float m_MaxLaunchForce = 30f;
public float m_MaxChargeTime = 0.75f;
public float nextFire = 0f;
private string m_FireButton;
private float m_CurrentLaunchForce;
private float m_ChargeSpeed;
private bool m_Fired;
// static float t = 0f;
private void OnEnable()
{
m_CurrentLaunchForce = m_MinLaunchForce;
m_AimSlider.value = m_MinLaunchForce;
// m_ReloadSlider.value = timeBetweenShells;
}
private void Start()
{
m_FireButton = "Fire" + m_PlayerNumber;
m_ChargeSpeed = (m_MaxLaunchForce - m_MinLaunchForce) / m_MaxChargeTime;
}
private void Update()
{
nextFire += Time.deltaTime;
/*
if (m_Fired == true)
{
m_ReloadSlider.value = Mathf.Lerp (minReload, timeBetweenShells, t);
t += 1f * Time.deltaTime;
}
*/
if (nextFire > timeBetweenShells)
{
m_AimSlider.value = m_MinLaunchForce;
if (m_CurrentLaunchForce >= m_MaxLaunchForce && !m_Fired)
{
m_CurrentLaunchForce = m_MaxLaunchForce;
Fire ();
}
else if (Input.GetButtonDown (m_FireButton))
{
m_Fired = false;
m_CurrentLaunchForce = m_MinLaunchForce;
m_ShootingAudio.clip = m_ChargingClip;
m_ShootingAudio.Play ();
}
else if (Input.GetButton (m_FireButton) && !m_Fired)
{
m_CurrentLaunchForce += m_ChargeSpeed * Time.deltaTime;
m_AimSlider.value = m_CurrentLaunchForce;
}
else if (Input.GetButtonUp (m_FireButton) && !m_Fired)
{
Fire ();
}
}
}
private void Fire()
{
nextFire = 0f;
m_Fired = true;
Rigidbody shellInstance = Instantiate (m_Shell, m_FireTransform.position, m_FireTransform.rotation) as Rigidbody;
shellInstance.velocity = m_CurrentLaunchForce * m_FireTransform.forward;
m_ShootingAudio.clip = m_FireClip;
m_ShootingAudio.Play ();
m_CurrentLaunchForce = m_MinLaunchForce;
}
}
The commented lines with Mathf.Lerp is the line that works, but only for the first shot.
What am I missing here?
Comment
Your answer
Follow this Question
Related Questions
How do I take out a UI Slider's value? 0 Answers
Healthbar/UI Slider glow effect 1 Answer
UI Sliders fall to minVal in build app 1 Answer
UI Slider under menu images 0 Answers