Тень для 2D спрайта с помощью скрипта

Программирование на Юнити.

Тень для 2D спрайта с помощью скрипта

Сообщение Taras 28 май 2022, 13:18

Добрый день.
Есть GameObject со спрайтом. Хочу на него повесить скрипт, который будет создавать тень.
Скрипт создает дочерний GameObject, вешает на него SpriteRenderer. И копирует спрайт из родительского заменив цвет на черный и прозрачность на половину. Далее смещается немного вниз и в лево.
Сейчас проблема с копированием спрайта:
Синтаксис:
Используется csharp
public class FigureShadow : MonoBehaviour
{
    private GameObject _shadowGameObject;
    private Sprite _shadowSprite;
    private Sprite _parenSprite;
    private SpriteRenderer _shadowSprRenderer;
    void Start()
    {
        _shadowGameObject = new GameObject("ShadowFigure");
        _shadowGameObject.transform.parent = transform;

        _parenSprite = GetComponent<SpriteRenderer>().sprite;
        _shadowSprite = Sprite.Create(_parenSprite.texture, _parenSprite.rect, _parenSprite.pivot);
        _shadowSprite.name = "shadow";

        _shadowSprRenderer = _shadowGameObject.AddComponent<SpriteRenderer>();
        _shadowSprRenderer.sprite = _shadowSprite;
        _shadowGameObject.GetComponent<SpriteRenderer>().sortingOrder = 3;
        _shadowGameObject.GetComponent<SpriteRenderer>().color = new Color(0, 0, 0, 0.5f);
        _shadowGameObject.transform.position -= new Vector3(0.2f, 0.2f, 0);
    }
}<span style="font-size: 150%; line-height: 116%;">[size=150][size=85]</span>[/size][/size]
 

Новый(теневой) спрайт не появляется на сцене, хотя в инспекторе есть.
Как правильно скопировть спрайт с помощью кода?
https://imageup.ru/img108/3945554/sampleshadow.jpg
Taras
UNец
 
Сообщения: 24
Зарегистрирован: 19 май 2021, 09:59

Re: Тень для 2D спрайта с помощью скрипта

Сообщение Taras 30 май 2022, 11:50

Разобрался. Новый спрайт улетал далеко за область видимости из-за неправильного пивота)
Все работает если заменить эту строчку:
_shadowSprite = Sprite.Create(_parenSprite.texture, _parenSprite.rect, _parenSprite.pivot);
на эту:
_shadowSprite = Sprite.Create(_parenSprite.texture, _parenSprite.rect, new Vector2(0.5f, 0.5f));
Taras
UNец
 
Сообщения: 24
Зарегистрирован: 19 май 2021, 09:59


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 8