Battery resource that decreases over time

Hello, I’m looking to have sort of flashlight in my game. I’m trying to get it to work so that you have a battery indicator somewhere on the screen, and that will deplete over time.

When the battery runs out, the flashlight(a spotlight in my case) will turn off.

Another part which I considered, but don’t know how to do, is that when you drive over a battery on the ground, the indicator would fill and if it was empty, turn on the light.

I have the basic idea of triggering things when you drive over them and such, but I have no idea how to script all the other stuff.

I’m not sure if it’s demanding a lot, as I’m horrible at programming and I’m only doing this for a rough demo of a game I thought of.

You can give the flash light an on and off boolean and also a starting number, Example:

bool isOn = true;

float flashlightPower = 10;

Then you can decrease the power and turn the flashlight off at zero power:

void Update(){
     flashlightPower -= Time.deltaTime;

    if(flashlightPower <= 0){
         isOn = false;
    }
}

When you pick a new battery you can reset the power:

void OnTriggerEnter(Collision coll){
     if(coll.transform.tag == "battery"){
          flashlightPower += 10;
     }
}

I hope this helps!

You could do the following: create the flashlight (a spotlight) and child it to the player, then adjust its position and orientation. The code that controls the flashlight, battery and pickups could be as follows (attached to the player):

public var flashlight: Light; // drag here the light from Hierarchy view
public var fullCharge: float = 100; // full charge = 100%
public var drainSpeed: float = 1.5; // drain speed = 1.5% per second
public var charge: float;

function Start(){
  charge = fullCharge; // battery full at start
}

function Update(){
  if (Input.GetKeyDown("f")){ // F toggles flashlight on/off
    lightOn = !lightOn;
  }
  if (lightOn && charge > 0){ // if flashlight on...
    charge -= Time.deltaTime * drainSpeed; // drain charge
    if (charge < 0) charge = 0; // clamp charge to zero
  }
  // update flashlight status
  flashlight.enabled = lightOn && charge > 0;
}

function OnTriggerEnter(other: Collider){
  if (other.CompareTag("Battery")){ // if trigger is tagged Battery...
    charge = fullCharge; // replace old batteries with a new one...
    Destroy(other.gameObject); // and destroy the pickup
  }
}

function OnGUI(){
  // show the charge
  GUI.Label(Rect(10,10,100,30), charge.ToString("F0")+"%");
}

If you want a bar graph instead of simple numbers, take a look at this question.