About button press sprint
Hi I'm currently making Player sprinting by pressing button. I made a button on UI and put my script. It doesn't make any error. But nothing happens. using System.Collections; using System.Collections.Generic; using UnityEngine;
public class Sprinter : MonoBehaviour {
public float sprintSpeed;
public float coolDownTimer;
public float durationTimer;
private bool sprinting;
void Start(){
sprinting = false;
sprintSpeed = 3.0f;
coolDownTimer = 0;
durationTimer = 0;
}
void OnClick()
{
if(Input.GetButton("Sprint"))
{
if(sprinting){
if(Input.GetButtonDown("Sprint") &&coolDownTimer <= 0)
{
durationTimer = 3.0f;
sprinting = true;
}
durationTimer -= Time.deltaTime;
if(durationTimer >= 0 &&Input.GetButtonDown("Sprint"))
{
transform.position = transform.forward * 3.0f * Time.deltaTime;
}
else
{
transform.position = transform.forward * 1.0f * Time.deltaTime;
}
coolDownTimer -= Time.deltaTime;
if(coolDownTimer <= 0)
{
coolDownTimer = 0;
}
}
else
{
transform.position = transform.forward * 1.0f * Time.deltaTime;
}
}
}
}
I want to make " When you press the sprint button on the UI, the player's speed goes up to 3.0f for 3 second and then have 5 second cool down." My game is FPS. Please help me.
Answer by Hellium · Nov 14, 2017 at 04:48 PM
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Sprinter : MonoBehaviour
{
public Button button; // Drag & Drop the button in the inspector
public float baseSpeed;
public float sprintSpeed;
public float sprintDuration;
public float cooldownDuration;
private float sprintTime;
private bool sprinting;
private float currentSpeed ;
void Start()
{
sprinting = false;
currentSpeed = baseSpeed;
sprintTime = -sprintDuration - cooldownDuration;
if ( button == null )
button = GameObject.Find( "Sprint" ).GetComponent<Button>();
button.onClick.AddListener( OnClick );
}
void Update()
{
if ( sprinting && Time.time > sprintTime + sprintDuration )
{
sprinting = false;
currentSpeed = baseSpeed;
}
transform.Translate( Vector3.forward * currentSpeed * Time.deltaTime );
}
public void OnClick()
{
// Prevent the player from spamming the button
if ( Time.time < sprintTime + sprintDuration + cooldownDuration )
return;
sprintTime = Time.time;
sprinting = true;
currentSpeed = sprintSpeed;
}
}
Thanks. But the problem is, I have to attach it to my button. Your script doesn't make any error as $$anonymous$$e, but doesn't work. I have to choose On Click() function..
You did not mentionned you wanted the UI button to call automatically the function. Check my updated answer.
Thanks! addListener made error so I changed to AddListener. It doesn't work. Thanks anyway. I should find another way.
Check my updated answer. I've got rid of initialization in the Start method so that you set the values in the inspector only.
I've created a blanck scene with only a cube and a button. I've attached the script to the cube and drag & dropped the button into the button
field. It works fine. Don't forget to fill the values in the inspector.
Oh you updated the answer! It works!!! Thank you. But my object is moving automatically... Any idea?
Yes, I thought it was what you wanted according to your initial script. Set the baseSpeed
to 0 if you don't want the object to automatiaclly move.