- Home /
instantiated object not moving with parent transform.
hi all!
thanks for taking a look :)
i am attempting to instantiate a vfx prefab with the transform of an existing game object, and then parent that instantiated object to another object. the desired effect is to have vfx spawn off a character's hand, and then travel with the character animation while retaining the position and orientation of its parent object.
in the code below, if the (Transform gauntletL_vfx) is left empty, the object will be instantiated but without retaining its parent's position.
as you can tell, i am new to scripting. any feedback is welcome.
thanks!
using UnityEngine; using System.Collections;
public class InstantiateGauntletVFX : MonoBehaviour
{
public GameObject gauntletVFX_01;
public Transform gauntletL_vfx;
public void OnVFXTrigger (Transform gauntletL_vfx)
{
Instantiate(gauntletVFX_01, gauntletL_vfx.position, gauntletL_vfx.rotation);
gauntletVFX_01.transform.SetParent(gauntletL_vfx, false);
}
}
As tanyamzho notes, the real problem is incorrect use of Instantiate. Look over the basic examples of how to spawn something and use the spawned thing afterwards.
The parent part is fine. It's only not working because of the messed-up Instantiate use.
Answer by tanyanzhi · Jun 03, 2015 at 01:26 PM
the returned value from function Instantiate is the new created object,so you could use it, not the original prefab gauntletVFX_01:
public void OnVFXTrigger (Transform gauntletL_vfx)
{
GameObject tmp = Instantiate(gauntletVFX_01, gauntletL_vfx.position, gauntletL_vfx.rotation) as GameObject;
tmp.transform.SetParent(gauntletL_vfx, false);
}
the transform.SetParent() has been buggy for me in the past. I have had better luck with setting it as a property.
public void OnVFXTrigger (Transform gauntletL_vfx)
{
GameObject tmp = Instantiate(gauntletVFX_01,gauntletL_vfx.position, gauntletL_vfx.rotation) as GameObject;
tmp.transform.parent = gauntletL_vfx.transform;
}
tmp.transform.SetParent(gauntletL_vfx, true); is the same as tmp.transform.parent = gauntletL_vfx.transform;
if you set the second parameter to false, the the Transform keep its local position,so in most cases, we set it to true.
here is the reference
wow thanks so much you guys! it was indeed an issue of how i was trying to instantiate the prefab. ill post the finished code in a bit.
Your answer
Follow this Question
Related Questions
Instantantiate relative to parents position 1 Answer
Distribute terrain in zones 3 Answers
Transform.parent returns only null 1 Answer
Multiple Cars not working 1 Answer
Duplicate UI object 2 Answers