如何将父游戏对象置于屏幕中心?

时间:2015-11-13 17:48:26

标签: unity3d screen center parent gameobject

我正在尝试使用固定相机制作Scrabble文字游戏,但我有一个简单的问题。

我添加了一些框作为游戏对象,这些框的数量是单词的长度,所以如果单词是" 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);

}

此图片显示了这个想法:

enter image description here

2 个答案:

答案 0 :(得分:1)

我相信你的代码正在运行,但问题是你的第一个字母位于你的父对象,然后从那时起的每个字母都被添加到右边。这意味着当您将父对象居中时,您正在做的是将第一个字母放在屏幕的中心。

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

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

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

答案 1 :(得分:0)

这是修复此问题的一些修改后的最后一个解决方案。

    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);

    }

enter image description here