我正在尝试使用固定相机制作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);
}
此图片显示了这个想法:
答案 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);
}