LexxXell
@LexxXell
Программист и немного IT-журналист

Unity: Как отобразить несколько спрайтов в одном объекте?

Как вывести несколько спрайтов для одного объекта?
Объясню на примере чего хочу добиться.
Объект, допустим, колесо автомобиля. Оно, по условиям, должно отрисовываться по отдельности, вроде бутерброда из спрайтов:
  1. Шина
  2. Диск
  3. Колпак

Есть несколько разных спрайтов дисков колеса, и колпак может быть установлен или не установлен.
Я пытался это организовать так:
Создал GameObject (назвал его Wheel) к нему добавил Sprite Renderer к которому подвязал спрайт покрышки, т.к. он не будет меняться. В Wheel создал четыре дочерних GameObject (Disk1, Disk2, Disk3, Cup), у каждого Sprite Renderer со своим спрайтом.

Чтобы не вдаваться в дебри условий смены того или иного диска на колесе, упрощу задачу.
К Wheel добавил коллайдер и скрипт обработки клика мышью:
using UnityEngine;

public class Wheel : MonoBehaviour {

	void OnMouseDown(){
                ???????????
	}
}


На месте вопросительных знаков должен быть код включающий и выключающий показ колпака колеса. Я так понимаю нужно проводить манипуляции с
.GetComponent<SpriteRenderer> ().enabled = true/false

но не знаю как обратиться к SpriteRenderer дочернего объекта.
  • Вопрос задан
  • 950 просмотров
Решения вопроса 2
GavriKos
@GavriKos Куратор тега Unity
но не знаю как обратиться к SpriteRenderer дочернего объекта.

Самое правильное - через [SerializeField] - и перетянуть в инспекторе.

Неправильное, но рабочее - через всякие FindObject с использованием имен/тегов/слоев/скриптов-меток.
Ответ написан
LexxXell
@LexxXell Автор вопроса
Программист и немного IT-журналист
Распишу подробнее решение, которое предложил GavriKos.

Скрипт должен выглядеть так:
using UnityEngine;

public class Wheel : MonoBehaviour {

  [SerializeField] // Теперь поле Cup появится у компонента скрипта в Inspector
  SpriteRenderer Cup;

  void OnMouseDown(){
    Cup.enabled = !Cup.enabled; // переключаем видимость спрайта
  }
}


В поле Cup, появившееся у компонента скрипта в Inspector, перетаскиваем из иерархии спрайт колпака.

Все работает.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
MrMureno
@MrMureno Куратор тега Unity
VR for all
Если колпаки и диски отличаются только текстурой. то я предложил бы сделать все же более оптимальную штуку

using UnityEngine;

public class Wheel : MonoBehaviour {

public Texture[] textures;
public Sprite targetSprite;

  void OnMouseDown(){
        targetSprite.sprite = textures[0]; // или любой другой номер или логика выбора.
  }
}


код приблизительный) не проверял в Unity)) может где опечатался. но сам принцип главное чтоб уловили.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы