Unity 5 2D рисование спрайтов программно

8

Как я могу рисовать спрайты в Unity 5 программно? Я ищу что-то похожее на spriteBatch.Draw()XNA. Результаты, которые я получаю при поиске, либо устарели http://wiki.unity3d.com/index.php?title=SpriteManager (написано в 2012 году), либо сделаны с использованием интерфейса Unity. Все, что я могу найти, это Spriteкласс в UnityEngine.dll. Это то, что мне нужно? Как будет работать рисунок? Я действительно не понимаю.

dimitris93
источник
Что вы подразумеваете под рисованием спрайтов? Вы имеете ввиду рендеринг их на экран или динамическое создание изображения, представленного спрайтом?
MichaelHouse
@ Byte56 рендеринг 2D-изображения на экране, как и любой движок 2D-игр, который я видел. Я не знаю, почему это так сложно найти, когда вы ищете в Google. Мне нужно что-то вроде spriteBatch.Draw (SpriteSheetName, позиция, прямоугольник, источник, масштаб, вращение), где прямоугольник определяет часть листа спрайта, который я пытаюсь нарисовать. Я сейчас пытаюсь сделать это, сделав, Spriteа затем, SpriteRendererно я не могу понять, как установить изображение для спрайта.
dimitris93
@ SpriteОбъекты Byte56 , похоже, даже не имеют свойства для установки изображения. самая близкая вещь, которую я вижу, это sprite.texture, которая доступна только для чтения ... фактически каждое свойство sprite доступно только для чтения
dimitris93

Ответы:

16

Unity не имеет такого рода «прямого режима» рендеринга, вы не будете вызывать Drawкакие-либо циклы обновления для Unity.

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

Чтобы создать новый спрайт для рисования на экране, вам нужно создать новый игровой объект, затем присоединить к нему скрипт SpriteRenderer и установить его спрайт.

GameObject go = new GameObject();
SpriteRenderer renderer = go.AddComponent<SpriteRenderer>();

renderer.sprite = Resources.Load("Sprites/Player", typeof(Sprite)) as Sprite;

Это предполагает структуру каталогов

-Assets
--Resources
---Sprites
----<Your 2D assets, set with their texture type to Sprite (2D and UI)>

Например:

введите описание изображения здесь

Тогда у вас был другой скрипт для изменения положения, поворота и т. Д., В зависимости от того, как вы хотите, чтобы он вел себя.

Самый простой способ выполнить все это без необходимости писать столько кода? Сначала создайте игровой объект в редакторе Unity. Как только игровой объект снабжен нужным спрайтом, скриптами поведения и всем этим. Перетащите его в каталог ресурсов. Это создает сборный. Сборные дома - это то, на что они похожи, сборные конструкции. Это законченные объекты, которые вы можете ссылаться и создавать на лету.

Вы бы создали такие как:

public void CreateObject(string prefabName) {
   GameObject newObject = 
      GameObject.Instantiate(Resources.Load(prefabName)) as GameObject;
}

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

Я думаю, что главное отличие, которое вы видите здесь, заключается в интенсивном использовании компонентов. Что вы, вероятно, не видели в других игровых движках, таких как XNA. Unity действительно мощный двигатель, но ваше разочарование возникает из-за того, что вы пытаетесь использовать его как другие двигатели, когда он не похож на другие. Проверьте мой профиль для некоторых тренировок, я добавил ссылку для бесплатной пробной версии, чтобы вам не пришлось платить.

MichaelHouse
источник
Ух ты. мое знание единства только увеличилось на тонну :) это имеет большой смысл на самом деле. я никогда не слышал о сборных ранее. большое спасибо за вашу помощь :)
dimitris93
также я только начал смотреть ваши уроки: D
dimitris93
@Shiro Вы можете сначала просмотреть основные, чтобы укрепить ваше понимание объектов Unity, компонентов, сборных конструкций и т. Д. Кроме того, не обращайте внимания на главу о моем курсе, посвященную GUI :( она устарела.
MichaelHouse
1
Похоже, новый вопрос для сайта, а не комментарии.
MichaelHouse
1
Этот ответ должен быть напечатан на первой странице документации Unity.
Пасхальное время