Hi. This seems like it should be pretty basic. I have a prefab called Grapple_Arrow. It contains meshes and scripts. I want to instantiate one of these when I hit a key, lets say. According to documentation I should do something like:
public class example : MonoBehaviour {
public Missile projectile;
void Update() {
if (Input.GetButtonDown("Fire1")) {
Missile clone;
clone = Instantiate(projectile, transform.position, transform.rotation);
clone.timeoutDestructor = 5;
}
}
}
Except that if I do exactly that with my prefab, I get an error:
error CS0246: The type or namespace name `Grapple_Arrow' could not be found. Are you missing a using directive or an assembly reference?
What I can do is this (feels like a workaround):
public class LerpzGrapple : MonoBehaviour {
public GameObject theGrapple;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
// later change this to getButtonDown
if (Input.GetKeyDown(KeyCode.Return)) {
GameObject grapple = Instantiate(theGrapple, transform.position, transform.rotation) as GameObject;
//grapple.OriginatingObject = gameObject;
Grapple grappleScript = grapple.GetComponent("Grapple") as Grapple;
grappleScript.originatingObject = gameObject;
}
}
}
And lo, it actually instantiates an object (actually I just figured this part out while typing the question). But it seems kind of a roundabout way. Can't I just add a line "using MyPrefab" or #include MyPrefab or something?
As it is, I can only instantiate a generic GameObject (which I even have to cast from Object to GameObject?!) when it seems I could have access to the exact prefab and all its many scripts and properties. (That's how it would be if I was working in pure code anyway.) From my generic GameObject, to access a property I have to do GetComponent()... which, while I don't know how it actually works, it looks like it's doing a string comparison. I hope that's in the precompile stage only. :)
So the crux of my long-winded question here is:
- am I doing this right?
- Is any part of my code redundant or suboptimal?
- Is there an easier / better way (in C#) ?