如何准确地在另一个物体的正上方生成GameObject?

4

我正在Unity中制作一款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);
 }

这样做的问题在于它生成的方块与平台重叠,这意味着我对于方块的y位置的计算是错误的。我还在适应使用Unity的世界坐标系,所以有人知道如何解决吗?
1个回答

5
您传递给InstantiateVector3将成为实例化游戏对象的中心,但是您似乎正在计算其底部应该在哪里。尝试将块高度的一半添加到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);

1
顶起。但是,我认为通过先计算blockBottom变量,然后从中计算blockCenter可以使这段代码更易读。 - Max Yankov
1
同意,不过我把它称为 platformTop,因为我认为这样更清晰。 - Adam H

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接