2015-11-13 3 views
0

Я пытаюсь создать игровую игру 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

ответ

1

Я считаю, что ваш код работает, но проблема в том, что ваша первая буква находится на ваш родительский объект, а затем каждая буква с этого момента добавляется вправо. Это означает, что когда вы центрируете родительский объект, то, что вы делаете, помещает первую букву в центр экрана.

Если вы запустите игру и используете вид сцены, чтобы посмотреть, где находится родительский объект, это может подтвердить это. Вместо этого вы вместо этого помещаете родителя в центр экрана, смещаете его на величину, равную длине слова.

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

Вы также можете рассмотреть вопрос об изменении некоторых из этих констант, таких как 1.5f в переменные с именами, как LetterSize или основывая его фактической префаб так, чтобы путь любые будущие изменения будут работать автоматически.

+0

спасибо человеку :) Ваше решение вдохновило меня, чтобы получить идеальное решение. Я использовал положение x последнего ребенка и разделил его на 2 .. Тогда он был центрирован точно :) –

+0

Рад слышать, а ваши фоны и активы выглядят хорошо. – NotAGenie

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

Смежные вопросы