如何正确地在另一个对象的顶部正确生成游戏对象?

are*_*esz 3 unity-game-engine

在工作2D中团结的游戏,我有困难,试图催生一个块正好在我的游戏平台之上。我不希望块看起来像是漂浮在平台上或与平台重叠。

我似乎无法正确计算。

我目前有这个代码:

public GameObject blockPrefab;
 public GameObject platform;
 public GameObject dummyBlock;

 // Use this for initialization
 void Start () 
 {
     float platformSize = platform.GetComponent<Renderer>().bounds.size.y;
     float blockSize = dummyBlock.GetComponent<Renderer>().bounds.size.y;
     Debug.Log(platformSize.ToString());


     GameObject test = (GameObject)Instantiate(blockPrefab,
                                               new Vector3(platform.transform.position.x, platform.transform.position.y + platformSize/2, platform.transform.position.z),
                                               Quaternion.identity);
 }
Run Code Online (Sandbox Code Playgroud)

问题在于它以与平台重叠的方式生成块,这意味着我对块的 y 位置的计算是错误的。

我仍然习惯于使用 Unity 的世界坐标系,所以是的。有谁知道如何解决这个问题?

Ada*_*m H 5

Vector3传递给Instantiate将成为游戏对象实例化的中心,但它看起来像你计算,其中它的底部应该是。尝试将块高度的一半添加到y坐标中:

float platformTop = platform.transform.position.y + platformSize/2;
Vector3 blockCentre = new Vector3(platform.transform.position.x, platformTop + blockSize/2, platform.transform.position.z);
GameObject test = (GameObject)Instantiate(blockPrefab, blockCentre, Quaternion.identity);
Run Code Online (Sandbox Code Playgroud)