如何将父游戏对象置于屏幕*?
问题描述:
我想使用固定摄像头制作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);
}
此图像显示你的想法:
答
我相信你的代码工作,但问题是,你的第一个字母位于您的父母对象,然后从此开始的每个字母都被添加到右侧。这意味着当你将父对象居中时,你正在做的是将第一个字母放在屏幕的中心。
如果您运行游戏并使用场景视图查看父对象的位置,则可以确认这一点。你可以做的是,而不是把父母放在屏幕的中心,将其偏移一个等于单词长度的量。
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);
}
感谢很多人:)您的解决方案启发了我,以获得完美的解决方案。 我已经使用了最后一个孩子的x位置并将它分成了2 ..然后它完全居中:) –
很高兴听到您的背景和资产到目前为止看起来不错。 – NotAGenie