新手在这里。我想实例化游戏对象到父对象上的特定位置。我想把它放在父母的顶部。实例化时是否可以立即放置它,还是需要使用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++;
}
}
}
如果我了解您的需求,...有一个带有Parent参数的实例化方法,因此您可以将新的GO创建为父级的子级。
public static Object Instantiate(Object original, Transform parent);
如果您想拥有某种枢轴,则可以在目标父对象中创建空的GameObject,将其移到正确的位置,并将该GO实例化为该空GO的子代。
[您也可以将多维数据集包装在另一个空的GameObject中(例如:位置0,0,0),因此您可以将多维数据集上移(0,5,0),但整个GameObject的原点保持不变(0,0,0 )。
我现在对Vector3有了更好的了解。看起来我可以在同一Vector3中将不同的GameObject位置加在一起:newPosition =新的Vector3(0,copyParentSize.y + copyParentPosition.y,0);现在,我根据其他对象的位置移动对象。谢谢您的帮助!