Unity 3D:将GameObject实例化到父对象上的特定位置

问题描述 投票:-1回答:2

新手在这里。我想实例化游戏对象到父对象上的特定位置。我想把它放在父母的顶部。实例化时是否可以立即放置它,还是需要使用transform.position?无论哪种情况,我都不知道该怎么做。如果您对自己的时间很慷慨,我还需要弄清楚如何让孩子轮流在父母身上。同样,每个子对象/副本或新的实例化对象都将随着每次新的迭代进行缩放。我正在尝试建立一棵反向分形树(随着时间的流逝,树枝变大)。

只是一个警告,您可能不愿尝试其他可能写得更好的代码。

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    public Transform Cube;
    public GameObject masterTree;
    public int instanceCounter = 1;
    public int numCubes = 30;
    public float scalar = 1.4145f;
    public float initialScale = 10f;
    public float angle = 30f;
    private Transform copy;

    void Start()
    {

    }

    private void Update()
    {
        if (instanceCounter <= numCubes)
        {
            if (instanceCounter == 1)
            {
                copy = Instantiate(Cube, new Vector3(0, 0, 0), Quaternion.identity);
                copy.transform.localScale = new Vector3(1f, initialScale, 1f);
                copy.name = "Copy" + instanceCounter;
                copy.transform.parent = masterTree.transform;
                instanceCounter++;
            }

            var copyParent = GameObject.Find("Copy" + (instanceCounter - 1));
            Vector3 copyParentSize = copyParent.GetComponent<Renderer>().bounds.size;
            Debug.Log("copyParentSizeY = " + copyParentSize.y);

            copy = Instantiate(Cube, new Vector3(0, 0, 0), Quaternion.identity);

            copy.transform.localScale = new Vector3(1f, initialScale, 1f);
            initialScale = initialScale * scalar;
            copy.name = "Copy" + instanceCounter;

            //copy.transform.rotation *= Quaternion.Euler(angle, angle, 0);
            copy.transform.parent = copyParent.transform;
            instanceCounter++;
        }
    }
}
unity3d position parent-child parent children
2个回答
0
投票

如果我了解您的需求,...有一个带有Parent参数的实例化方法,因此您可以将新的GO创建为父级的子级。

public static Object Instantiate(Object original, Transform parent);

如果您想拥有某种枢轴,则可以在目标父对象中创建空的GameObject,将其移到正确的位置,并将该GO实例化为该空GO的子代。

[您也可以将多维数据集包装在另一个空的GameObject中(例如:位置0,0,0),因此您可以将多维数据集上移(0,5,0),但整个GameObject的原点保持不变(0,0,0 )。


0
投票

我现在对Vector3有了更好的了解。看起来我可以在同一Vector3中将不同的GameObject位置加在一起:newPosition =新的Vector3(0,copyParentSize.y + copyParentPosition.y,0);现在,我根据其他对象的位置移动对象。谢谢您的帮助!

© www.soinside.com 2019 - 2024. All rights reserved.