如何使父游戏对象在屏幕中居中?

How to center parent game object in the screen?

我正在尝试使用固定相机制作拼字游戏,但我遇到了一个简单的问题。

我添加了一些盒子作为游戏对象,这些盒子的数量是单词的长度,所以如果单词是 "Fish" 我们将动态添加 4 个盒子。我成功地做到了,但我无法将这些框放在屏幕中央。我尝试将这些游戏对象作为子对象添加到另一个游戏对象下,然后将父对象居中,但没有任何效果。

这是我的代码:

void Start () {

    for (int i=0; i<word.Length; i++) {
        GameObject LetterSpaceObj = Instantiate(Resources.Load ("LetterSpace", typeof(GameObject))) as GameObject;
        LetterSpaceObj.transform.parent = gameObject.transform;
        LetterSpaceObj.transform.localPosition = new Vector2(i*1.5f,0.0f);
        LetterSpaceObj.name = "LetterSpace-"+count.ToString();  
        count++;
    }

    gameObject.transform.position = new Vector2 (0.0f, 0.0f);

}

这张图片向您展示了这个想法:

我相信你的代码可以工作,但问题是你的第一个字母位于你的父对象,然后每个字母都添加到右边。这意味着当您将父对象居中时,您所做的就是将第一个字母放在屏幕的中央。

如果您 运行 游戏并使用场景视图查看父对象的位置可以确认这一点。您可以做的是,不要将父项放在屏幕中央,而是将其偏移等于单词长度的量。

gameObject.transform.position = new Vector2 (-(word.Length / 2.0f) * 1.5f, 0.0f);

您可能还想考虑将其中一些常量(例如 1.5f)更改为名称为 LetterSize 的变量,或者将其基于实际的预制件,以便将来的任何更改都将自动生效。

这是经过一些编辑以解决此问题后的最后一个解决方案。

    GameObject LetterSpaceObjRow;
    int count = 1;
    string word = "Father";
    float ObjectXPos;
    float LocalScaleX;


    void Start () {


        for (int i=0; i<word.Length; i++) {


            GameObject LetterSpaceObj = Instantiate(Resources.Load ("LetterSpace", typeof(GameObject))) as GameObject;
            LocalScaleX = LetterSpaceObj.transform.localScale.x;
            ObjectXPos = i*(LocalScaleX+(LocalScaleX/2));
            LetterSpaceObj.transform.parent = gameObject.transform;
            LetterSpaceObj.transform.localPosition = new Vector2(ObjectXPos,0.0f);
            LetterSpaceObj.name = "LetterSpace-"+count.ToString();  
            count++;
        }



        gameObject.transform.position = new Vector2 (-(ObjectXPos/2.0f) , 0.0f);

    }