Just an update, but after I had given up and decided to move on and find a different way about going about things, I got an idea that I tried and eventually found a way to do exactly what I wanted to do from the beginning. So I’m updating this with the solution so that if anyone else stumbles on this thread trying to accomplish something similar, it may help them out.
After I realized that I couldn’t arbitrarily pass values between non-active scripts, I got the idea that as long as they were all active and connected somehow, it should work. Then I realized that parenting was the answer. Here’s what I did:
Event #1 (as a gameObject) will trigger a sequence of instantiated game objects (a number of Warhead ships that I can set in the event script). But I also needed the event script to be able to pass values off onto the Warhead ship instance as well (things like ship speed, start position, etc). Kind tough to do, yes, but not impossible.
First I needed the Event trigger to generate the instantiated objects as a “child” of the event. Here’s the code that did that:
GameObject instance = Instantiate(ObjectTrigger, new Vector3(3, 0, 0), Quaternion.identity) as GameObject;
instance.transform.parent = transform;
Cool. Now that I had the gameObjects instantiating as children to my event, now I just needed to find a way to have those children (with their own scripts) pull values from the “parent” event script. This wasn’t as easy as I expected. There’s a feature called “.GetComponentsInChildren” which can help when the parent needs info from the children, but no “.GetComponentsInParent” if you need to go to the parent in the hierarchy like I did.
There are two ways to do it. One is the clean way and one is the potentially bad way that will cause conflicts. The first way I did it was to attempt to just use “.FindGameObjectsWithTag” and give my parent event a special tag. This seems like it works beautifully, but the catch is that it will only work right if you have one instance of that event going on at one time. What if I wanted to have two or three events that were generating instantiated Warhead ships? Well, the problem with .FindGameObjectsWithTag is that it will override every event with the same tag, regardless of hierarchy. Not good.
Now here’s the alternate solution that worked exactly as I needed it to and won’t go outside of the hierarchy. Here’s what I did in the script of the script of the instantiated prefab object.
WarheadEvent warhead = (WarheadEvent)GameObject.Find([b]transform.parent.name[/b]).GetComponent("WarheadEvent");
Position = warhead.ShipPosition;
currentSpeed = warhead.ShipSpeed;
transform.parent.name is the kicker here. That ensures that it is grabbing the values from whatever the parent is. The reason I can’t just go by name, is that every event will be named differently, so therefore, searching by name is unreliable. This way, it will get values from the parent, regardless of its name.
Here’s a sample pic of what I accomplished and why this is useful:

Click here for full size image
As you can see above, I have two events, running concurrently, each with their own children being generated, but each event is behaving differently. I am now able to change the ship spacing, ship speed, position, amount, or anything else I want, and pass those values onto the instanced objects without any problems. I can also have multiple instances of this event running, without either affecting or conflicting with each other.
Here’s a more complete version of the code I used to accomplish this:
Here’s the code for the EVENT script (only the important part)
public float GenerationAmount = 8;
public float ShipSpacing = 0.4f;
public float ShipPosition = 0;
public float ShipSpeed = 4;
IEnumerator ShipSpread()
{
for (int i = 1; i <= GenerationAmount; i++)
{
//These next two lines are calling from another script that handles triggers based on a set game //object.
EventHandler ReadObjectTrigger = (EventHandler)gameObject.GetComponent("EventHandler");
GameObject ObjectTrigger = ReadObjectTrigger.TriggerObject as GameObject;
yield return new WaitForSeconds(ShipSpacing);
//These next two lines are the important ones. They will help instantiate the set prefab as a
//child GameObject.
GameObject instance = Instantiate(ObjectTrigger, new Vector3(3, 0, 0), Quaternion.identity) as GameObject;
instance.transform.parent = transform;
}
}
Here’s the code for the INSTANTIATED object script (only the important part)
private float currentSpeed;
private float Position;
private float ShipSpread;
private float ShipCount;
void Start()
{
//This next line opens the possibility to nab values from the parent (the event object)
WarheadEvent warhead = (WarheadEvent)GameObject.Find(transform.parent.name).GetComponent("WarheadEvent");
//These next two lines are me assigning the values I am taking so that I can transfer them over to //the actual instanced ship script.
Position = warhead.ShipPosition;
currentSpeed = warhead.ShipSpeed;
}
There ya go. I hope this wasn’t too confusing, but I really hope that this can help someone else out down the road, because it was kind of a pain to figure out. Now that I have it set, setting variations on events is a breeze, and helps to me time out events and ship behaviors in nothing flat. It’s really useful.