2016-06-13 4 views
1

Я пытаюсь икру 2d спрайт изображения на экране в случайном положении:Unity создать спрайт во время выполнения в произвольном положении

 tex = Resources.Load<Texture2D>("pig") as Texture2D; 
     Sprite sprite = new Sprite(); 
     sprite = Sprite.Create(tex, new Rect(0, 0, 250, 150), new Vector2(Random.Range(-1.5f, 1.5f), Random.Range(-1.5f, 1.5f))); 
     GameObject newSprite = new GameObject(); 
     newSprite.AddComponent<Rigidbody2D>(); 
     newSprite.GetComponent<Rigidbody2D>().gravityScale = 0f; 
     newSprite.AddComponent<ObjectMovement>(); 
     newSprite.AddComponent<SpriteRenderer>(); 
     SR = newSprite.GetComponent<SpriteRenderer>(); 
     SR.sprite = sprite; 

Однако Размещение спрайта не является точным и время порождал в крошечная область, я хочу, чтобы она была в любой точке экрана. Каким должен быть мой случайный диапазон?

+0

Эта 2D или 3D-игра? Кроме того, поскольку 'newSprite' имеет недавно загруженный спрайт, прикрепленный к нему, для чего используется' SR'? Вы хотите позиционировать 'SR' или' newSprite'? Пожалуйста, ответьте на каждый вопрос, чтобы получить ответ от меня. – Programmer

+0

@Programmer. Это 2D-игра, и я хочу позиционировать игровой объект, позиционируя спрайт на Sprite.create, также будет влиять на положение игрового объекта, поэтому не имеет значения, не Это? – DAVIDBALAS1

+0

Но какой GameObject вы хотите разместить? 'NewSprite' или' SR'. Для меня похоже, что вы хотите позиционировать 'newSprite'. Я не знаю, что такое «SR» или используется, поэтому я не могу ответить на это. Я буду предлагать решение для 'newSprite', но вы всегда можете его изменить. – Programmer

ответ

1

Вы должны преобразовать вид в мире точка с , то вы можете использовать в для представления размера экрана 0,5 является средней точкой.

Не пытайтесь изменить позицию с Sprite.Create. Сделайте это после создания спрайта. Удалите случайный код в этой строке кода. Единственное, что нужно добавить,

newSprite.transform.position = Camera.main.ViewportToWorldPoint(new Vector3(Random.Range(0f, 1f), Random.Range(0f, 1f), Camera.main.nearClipPlane + 15f)); 

Я буду использовать код с вашего последнего вопроса, чтобы ответить, чтобы убедиться, что нет других проблем в текущем коде. Протестировано и работает.

Texture2D tex = Resources.Load<Texture2D>("pig") as Texture2D; 
Sprite sprite = new Sprite(); 
sprite = Sprite.Create(tex, new Rect(0, 0, 250, 150), new Vector2(0.5f, 0.5f), 40); 
GameObject newSprite = new GameObject(); 
newSprite.AddComponent<Rigidbody2D>(); 
newSprite.GetComponent<Rigidbody2D>().gravityScale = 0f; 
//newSprite.AddComponent<ObjectMovement>(); 
newSprite.AddComponent<SpriteRenderer>(); 
SR = newSprite.GetComponent<SpriteRenderer>(); 
SR.sprite = sprite; 
SR.transform.position = Camera.main.ViewportToWorldPoint(new Vector3(Random.Range(0f, 1f), Random.Range(0f, 1f), Camera.main.nearClipPlane)); 
+1

Спасибо, Отлично. – DAVIDBALAS1

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