- Home /
Detecting Input in the Start function (C#)
Hi everyone, I have following problem. I made a very simple Weapon pickup script(C#), not to extrem complex(I am still a novice at scripting). But the thing is every time I parent my gun to my camera it just flies away since the the function to parent the gun to the camera is called right after i press "F". Because my "F" input is called in the Update function the gun ,after a parented it, just keeps on flying. So I experimented around and found out the when I put my function to parent the gun to the camera in the start funcion it works perfectly, but the thing is you can't detect input int the Start function(or can you?). So it parents the gun to the camera when the game starts. Here is the script when the gun flies away:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class weapon_pickup : MonoBehaviour {
public List<Transform> weapons;
public Transform selectedWeapon;
public GameObject Ak47;
public Transform cameraTransform = Camera.main.transform;
public GameObject player;
// Use this for initialization
void Start () {
weapons = new List<Transform>();
AddweaponsToList();
}
public void AddweaponsToList(){
GameObject[] go = GameObject.FindGameObjectsWithTag("Weapon");
foreach(GameObject weapon in go)
Addweapon(weapon.transform);
}
public void Addweapon(Transform weapon){
weapons.Add(weapon);
}
// Update is called once per frame
void Update () {
SelectWeapon();
}
public void SelectWeapon(){
float distance = Vector3.Distance(Ak47.transform.position, player.transform.position);
Debug.Log(distance);
if(Input.GetKeyUp(KeyCode.F) && distance < 2){
selectedWeapon = weapons[0];
Position_Ak();
}
}
public void Position_Ak(){
if(Input.GetKeyUp(KeyCode.F)){
Ak47.transform.parent = cameraTransform;
//cameraTransform.localPosition = new Vector3(0,0,0);
}
}
}
Now when I call the Position_Ak function the start function it starts it right away. Also it gives me this error(But I can still play): 1. UnityEngine.Camera:get_main() weapon_pickup:.ctor()
2.ArgumentException: get_main can only be called from the main thread. Constructors and field initializers will be executed from the loading thread when loading a scene.
Maybe I am just to stupid to find the error (since I am a beginnerXD
Thanks in advance
Ps: Excuse my bad Englishenter code here
Answer by DaveA · May 07, 2011 at 05:44 PM
Don't rely on constructors, use the Start method:
public Transform cameraTransform;
void Start()
{
cameraTransform = Camera.main.transform;
.... etc ...
PS You can use Vector3.zero instead of Vector3(0,0,0)
Thanks! but this does not really solve my problem!
It means you don't have to worry about Input being called from Start.
Your answer
Follow this Question
Related Questions
bool value does not change 1 Answer
Start, Awake, Update. Any other ways to call functions from an empty GameObject? 3 Answers
Help with If statement INSIDE if statement!! 2 Answers
Script and Start function of script are running, but Update function is not? 0 Answers
Update increment error (2 + 1 = 0?) 1 Answer