Certain Variables Never Update

Hello, I’ve run into an issue. I created a timer that records the amount of time offline and give you the time it is after logged in, in order to gain up to the max amount of lives while your on or off the game. Certain variables in my scripts won’t update. This is the most important one right now. So I am posting this one here. You will see how a Debug.Log exists when it’s trying to see if it’ll reach below zero. It actually fires just fine, but you will notice the staticVariables.remainingLives += 1 never updates in the other script. This happens to me when updating a position of a character and camera in FixedUpdate as well. Hoping someone can help. THANKS!

using UnityEngine;
using System.Collections;
using System;
public class LivesTimer : MonoBehaviour {

	public StaticVariables staticVariables;
	public OTTextSprite livesLeftOT;
	public OTTextSprite livesTimerText;
	public TimeSpan timeDifference;
	public DateTime currentDate;
	public DateTime oldDate;
	public long temp;
	public int maxTime;
	public DateTime timeMax = new DateTime(2013, 1, 1, 0, 2, 0);
	public DateTime timeDefault = new DateTime(2013, 1, 1, 0, 2, 0);
	public int dividedTimeMinutes;
	public int dividedTimeSeconds;
	public int offSeconds;
	public int offMinutes;
	public int timeDiffOffSec;
	public static int livesGained;
	public int newMinutesLeft;
	public int newSecondsLeft;
	public int differenceMinRemain;

void Start(){
	
	// Check if Lives exists, if so update remainingLives
	if (PlayerPrefs.HasKey("Lives"))
	{
		staticVariables.remainingLives = PlayerPrefs.GetInt("Lives");
		
		
	}
	else
	{
		// if Lives doesn't exist, give it a default of 5
		staticVariables.remainingLives = 5;
	}
	
	if (PlayerPrefs.HasKey("sysString")){
		// Record all timeData
		currentDate = DateTime.Now;
		
		temp = Convert.ToInt64(PlayerPrefs.GetString("sysString"));
		oldDate = DateTime.FromBinary(temp);
		
		timeDifference = currentDate.Subtract(oldDate);
		Debug.Log("Difference: " + timeDifference.ToString());
		
		Debug.Log("Current: " + currentDate.ToString());
		Debug.Log("Old: " + oldDate.ToString());
		
		// dividedTimeMinutes = Mathf.Floor(timeDifference.get_Minutes() / maxTime);
		
		
		Debug.Log("DividedTime: " + dividedTimeMinutes.ToString());
	}
	
	Debug.Log("timeDifference: " + timeDifference.ToString());
	
	livesGained = Convert.ToInt32(Mathf.Floor(timeDifference.Minutes / maxTime));
	Debug.Log("livesGained: " + livesGained.ToString());
	
	
	
	differenceMinRemain = Convert.ToInt32(Mathf.Floor(timeDifference.Minutes % maxTime));
	Debug.Log("differenceMinRemain: " + differenceMinRemain.ToString());
	
	newMinutesLeft = PlayerPrefs.GetInt("minutesLeft") - differenceMinRemain;
	Debug.Log("newMinutesLeft: " + newMinutesLeft.ToString());
	
	if (timeDifference.Seconds > PlayerPrefs.GetInt("secondsLeft")){
	newSecondsLeft = timeDifference.Seconds - PlayerPrefs.GetInt("secondsLeft");
	newMinutesLeft -= 1;
	
		if (newMinutesLeft < 0){
		// THE ISSUE LIES HERE!!
			livesGained += 1;
			staticVariables.remainingLives +=1;
			Debug.Log("checkIfRan #1");
			livesLeftOT.text = staticVariables.remainingLives.ToString();
			newMinutesLeft = maxTime - 1;
			
		}
	
	newSecondsLeft = 60 - newSecondsLeft;
	}
	
	if (timeDifference.Seconds < PlayerPrefs.GetInt("secondsLeft")){
	newSecondsLeft = PlayerPrefs.GetInt("secondsLeft") - timeDifference.Seconds;
	
		if (newMinutesLeft < 0){
		// THE ISSUE LIES HERE!!
			Debug.Log("checkIfRan #2");
			livesGained += 1;
			staticVariables.remainingLives +=1;
			livesLeftOT.text = staticVariables.remainingLives.ToString();
			newMinutesLeft = maxTime - 1;
			
			
		}
	}
	
	 
		
		if (staticVariables.remainingLives > 5){
			staticVariables.remainingLives = 5;
			timeMax = timeDefault;
		}
	
	timeMax = new DateTime(2013,1,1,0,newMinutesLeft, newSecondsLeft);
	
	livesLeftOT.text = staticVariables.remainingLives.ToString();
	
	
	livesTimerText.text = newMinutesLeft.ToString() + " : " + newSecondsLeft.ToString();
	

	StartCoroutine("OneSecondUpdate");
}

I guess I figured it out, but not sure about in my other scripts. Seems to be because I put it all in the start function. Apparently the other script may not be fully initialized yet? All I know is I had to stick it in a Coroutine, with a WaitForSeconds set really low. Then it made all the changes I asked for. Not sure if there is any other reasons, but works for me.