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

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

问题描述:

我想使用固定摄像头制作Scrabble文字游戏,但我有一个简单的问题。如何将父游戏对象置于屏幕*?

我添加了一些框作为游戏对象,这些框的数量是单词的长度,所以如果单词是“鱼”,我们将动态地添加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

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

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

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

您还可能要考虑改变其中的一些常量,比如1.5F到变量与名称类似LetterSize或立足其关闭实际预制,这样的方式的任何未来的变化将自动工作。

+0

感谢很多人:)您的解决方案启发了我,以获得完美的解决方案。 我已经使用了最后一个孩子的x位置并将它分成了2 ..然后它完全居中:) –

+0

很高兴听到您的背景和资产到目前为止看起来不错。 – NotAGenie

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

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