Problem with custom bolts in Space Shooter
I am following the Space Shooter tutorial, and I got to the point where the ship can shoot bolts. (Works fine.) I thought it might be interesting to have bolts affected by the speed of the ship, which I thought should be easy enough. The problem is that a prefab cannot have a GameObject as a parameter (makes sense, in case the object is destroyed). So instead I created a new function in the Mover script used in bolt:
public void AddSpeed() {
GetComponent<Rigidbody>().velocity = new Vector3(0.0f, 0.0f, 0.0f);
}
This function stops bolts if successfully called, for example when I include it in Mover.Start(). Then, in PlayerController, I added a call to this function right after the bolt is instantiated:
GameObject clone = Instantiate(shot, shot_spawn.position, shot_spawn.rotation) as GameObject;
clone.GetComponent<Mover>().AddSpeed();
This code compiles and executes without complain, but it is quite clear AddSpeed is not working (since bolts move normally). Because I don't get error feedback I am unsure what is going on and how to fix it, so I would really thank any help.
Answer by uncronopio · Nov 08, 2015 at 04:33 PM
After I learned about Debug.Log (further in the same tutorial) I was able to figure it out on my own.
The problem is that Start() function is NOT executed inmediately after instantiation, so my function AddSpeed (which is called correctly) was working as intended, but later Start() would undo any changes.
My solution was to pass the player's speed to the script Mover and add this speed later in Start().
Your answer
Follow this Question
Related Questions
Create gameobject in other scene... 0 Answers
Im having an issue when Instantiate Prefab with specific rotation 2 Answers
Place prefab with mouse on to a grid based surface with a correct orientation. c# 0 Answers
Can't Instantiate an object as child of another 1 Answer
Cannot convert UnitEngine.Vector3 to UnityEngine.Transform when using .postition 1 Answer