在Unity3D中将预制件实例化为子级

时间:2014-11-06 13:30:17

标签: unity3d

我希望gameObject添加instanciatetd对象prom预制件作为他的胆汁。 所以我写了这段代码:

public class TgtGenerator : MonoBehaviour {

public SpriteRenderer spriteTgt;

public Sprite[] targets;public SpriteRenderer spriteTgt;

// Use this for initialization
void Start () {
}

// Update is called once per frame
void Update () {
    generateRandTgt ();
}


void generateRandTgt(){
    SpriteRenderer tgt = GameObject.Instantiate (spriteTgt, getRandPosition (), Quaternion.identity)as SpriteRenderer;
    tgt.sprite = randSprite ();
}


Sprite randSprite(){
    var length = targets.Length-1;
    Debug.Log (Random.Range(0,length));
    return targets[Random.Range(0,length)];
}


Vector3 getRandPosition(){
    float xScale = gameObject.transform.localScale.x / 2;
    float yScale = gameObject.transform.localScale.y / 2;

    float x = Random.Range(-xScale,xScale);
    float y = Random.Range(-yScale,yScale);
    float z = 0;

    return new Vector3 (x, y, z);
}

实例化的对象正在从我想要的预制件中获得他的大小。 但问题是它是否在hirarchy的根节点处实现,因此它们不像我想的那样放在gameobject坐标内。

当我在instaciate line之后添加这行代码时:

tgt.transform.parent = gameObject.transform;
它生成像我想要的孩子,但它变得巨大而且颠倒了。 我该如何管理?

1 个答案:

答案 0 :(得分:2)

尝试使用此方法强迫孩子在成为孩子后拥有自己的规模:

var localScale = child.transform.localScale; // store original localScale value
child.transform.parent = parent;
child.transform.localScale = localScale; // force set