- Home /
 
component activate on timer
is it possible to change the if(Input.GetKeyUp(KeyCode.F5)) into a timer of some sort i only need it to runs once and the rest of the script should still enable it
enable script i use to activate currently
EnableTargeting script
using UnityEngine; using System.Collections;
public class EnableTargetting : MonoBehaviour { private Targetting myTarget;
 void Start ()
 {
     myTarget = GetComponent<Targetting>();
 }
 
 
 void Update ()
 {
     if(Input.GetKeyUp(KeyCode.F5))
     {
         myTarget.enabled = !myTarget.enabled;
     }
 }
 
               }
Answer by Visual Programmer · Sep 30, 2013 at 01:41 AM
I use Javascript and the way I quickly do timers is by logging a start time and wait amount and checking if the current time is greater than the sum of both.
JS:
 var startTime:float;
 var waitInSeconds:float;
 
 function Start(){
      startTime = Time.time;
 }   
 
 function Update(){
      if(Time.time > startTime + waitInSeconds){
           //run code
      }
 }
 
               C# -- Use this as a stand-alone component to add another component after specified time.
 using UnityEngine;
 using System.Collections;
 
 public class timer : MonoBehaviour {
     public float waitInSeconds = 1.0F;
     public float startTime;
     
     // Use this for initialization
     void Start(){
         startTime = Time.time;
     }
     
     // Update is called once per frame
     void Update(){
         if(Time.time > startTime + waitInSeconds){
             gameObject.AddComponent("nameOfScript");
             Destroy (this);
         }
     }
 }
 
 
              i need it in c# i'm still learning no good at converting from java to c#
^ Updated code above with c#. That should work for you. ^
Answer by scamp · Sep 29, 2013 at 11:57 PM
In C#, Coroutines are the standard method for timer-based logic.
Specifically, check out "WaitForSeconds(float sec)"
This example from the documentation is essentially what you need:
 IEnumerator DoCheck() {
     for(;;) {
         ProximityCheck;
         yield return new WaitForSeconds(.1f);
     }
 }
 
               Just call StartCoroutine("DoCheck") once inside your Start() or Awake() method
Oh, so you just want to enable it one time, which is 1 second after startup. So then you don't need an inifinite loop in your coroutine, just put
 IEnumerator Enable$$anonymous$$yTarget()
 {
     yield return new WaitForSeconds(1f);
     myTarget.enabled = !myTarget.enabled;
 }
 
 void Start ()
 {
     myTarget = GetComponent<Targetting>();
     StartCoroutine("Enable$$anonymous$$yTarget");
 }
                 Your answer
 
             Follow this Question
Related Questions
Multiple Cars not working 1 Answer
c# add/move lines of text in GUI box 1 Answer
c# play particle effect on key press? 1 Answer
Removing dead bodies, big lag issue. 2 Answers