2015-07-17 4 views
2

Игра, в которой я развиваюсь, имеет боковой прокручиваемый фон. У меня много фоновых спрайтов , и когда первое фоновое изображение выходит из границ экрана, я добавляю еще один фон. Когда я добавляю новые фоны, я просто проверяю ширину фонового спрайта и, создаю экземпляр (во время движения) после текущего фона, но он показывает крошечную линию между фоновыми изображениями.Unity 2d пространство между спрайтами

renderer = mapObject.GetComponent<SpriteRenderer>(); 
mapWidth = renderer.bounds.size.x; 

//instantiate new map to new position 
addMap(newMap,new Vector3(mapWidth,0f,0f)); 

Это проблема происходит потому, что я создаю экземпляр нового спрайта при перемещении текущий? или какие-либо идеи для решения этой проблемы?

+0

исчезают ли строка, если приостановить прокрутку? Возможно, это проблема разрыва VSYNC-Off? – MickyD

+0

Спасибо, что reply.line не исчезнет даже при паузе scrolling.so. Я думаю, что это проблема с позицией объекта, созданной – Hassy31

+0

, и я попытался настроить пространство, добавляя дополнительные значения (которые я не хочу делать вручную) to mapWidth, то иногда строка появляется, когда scrolling.may отличается от позиционирования и в этом случае выглядит VSync. – Hassy31

ответ

0

Может быть, масштаб вашего спрайта не является (1, 1, 1)

вы можете попробовать это

GetComponent<Renderer>().bounds.size.x 

Я сделал эту работу с кодом, прежде чем с редактором на единицу спрайты.

Вот мой код

public void SortMaps() { 
    float sceenHeight = Camera.main.orthographicSize * 2; 
    float aspectRatio = 760f/660f; 
    float sceenWidth = sceenHeight * aspectRatio; 
    float proportion = sceenWidth/mapBgs.transform.GetChild (0).GetComponent<SpriteRenderer>().sprite.bounds.size.x; 
    //In my method the sprite's width should equal to the sceen's width, so the first sprite's position should be -(sceenHeight/2 - sceenWidth/2) 
    float initY = -(sceenHeight/2 - sceenWidth/2); 

    //First sprite 
    mapBgs.transform.GetChild (0).name = "MapBg01"; 
    mapBgs.transform.GetChild (0).transform.position = new Vector3 (0, initY, 0); 
    mapBgs.transform.GetChild (0).transform.localScale = new Vector3(proportion, proportion, 0); 
    for (int i = 1; i < mapBgs.transform.childCount; i++) 
    { 
     mapBgs.transform.GetChild(i).name = "MapBg" + (i + 1).ToString().PadLeft (2, '0'); 
     //change the scale to make the sprite adapt to the sceen 
     mapBgs.transform.GetChild(i).transform.localScale = new Vector3(proportion, proportion, 0); 
     //Next sprite's position 
     float y = mapBgs.transform.GetChild(i - 1).transform.position.y + 
      mapBgs.transform.GetChild(i - 1).gameObject.GetComponent<Renderer>().bounds.size.y/2 + 
       mapBgs.transform.GetChild(i).gameObject.GetComponent<Renderer>().bounds.size.y/2; 
     mapBgs.transform.GetChild(i).transform.position = new Vector3 (0, y, 0); 
    } 
} 
+0

спасибо за ответ. Вы сказали, что масштаб игрового объекта не был (1, 1, 1) .it был (1.1, 1.1, 1.1), но я попробовал использовать по умолчанию линию по умолчанию. И я использовал GetComponent () .bounds.size.x тоже, но не work.did вы добавляете карты внутри Update или fixedUpdate? – Hassy31

+0

Я добавил карты в Редактор, перед игрой. Вы использовали функцию SetParent или другую функцию для изменения родителя игрового объекта? Если вы это сделали, посмотрите на localScale gameobject после setParent, он может измениться. Я советую вам распечатать GetComponent () .bounds.size.x и позицию. Вы можете Debug в IEnumerator вместо Update. – zhangjiangtao

+0

Проблема заключается в том, что я добавляю карты в функции FixedUpdate. Должен ли я избегать Fixedupdate? У меня есть 3-4 текстуры в одном объекте карты, поскольку у него есть коллайдеры. если я добавлю все карты перед запуском игры, сцена займет время, чтобы загрузить и будет иметь проблемы с памятью. Я не использовал setParent. – Hassy31

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