• Как сделать прозрачным группу спрайтов SpriteRenderer одновременно?

    ildarin
    @ildarin Автор вопроса
    Вот исходники моего решения (два класса, один - хелпер)
    UnityHelper.Current.OrderMinValue=-32767

    Решение так себе т.к. сильно ресурсозатратно.

    using System.Collections.Generic;
    using System.Linq;
    using UnityEngine;
    using System.Collections;
    using UnityEngine.UI;
    
    public static class UnityExtensions
    {
        public static void SetColorAlpha(this Image image, float value)
        {
            image.color = new Color(image.color.r, image.color.g, image.color.b, value);
        }
    
        public static void SetColorAlpha(this SpriteRenderer spriteRenderer, float value)
        {
            spriteRenderer.color = new Color(spriteRenderer.color.r, spriteRenderer.color.g, spriteRenderer.color.b, value);
        }
    
        public static IEnumerable<Transform> GetAllChildrenRecurcive(this Transform transform)
        {
            foreach (Transform child in transform)
            {
                yield return child;
                foreach (var innerChild in child.GetAllChildrenRecurcive())
                {
                    yield return innerChild;
                }
            }
        }
    
        public static IEnumerable<T> GetComponents<T>(this IEnumerable<Transform> transforms)
        {
            return transforms.Select(t => t.GetComponent<T>()).Where(c => c != null);
        }
    }
    
    public class MaskOpacityBehaviour : MonoBehaviour
    {
        private List<ChildSpriteMask> ChildSpriteMasks { get; set; }
    
        private void Start()
        {
            ChildSpriteMasks = new();
            var children = transform.GetAllChildrenRecurcive().GetComponents<SpriteRenderer>().ToList();
            foreach (var child in children)
            {
                child.maskInteraction = SpriteMaskInteraction.VisibleOutsideMask;
    
                var maskGo = new GameObject(child.name + "mask");
                maskGo.transform.parent = transform;
                var spriteMask = maskGo.AddComponent<SpriteMask>();
                spriteMask.isCustomRangeActive = true;
    
                UpdateSpriteMask(child, spriteMask);
    
                ChildSpriteMasks.Add(new ChildSpriteMask(child, spriteMask));
            }
        }
    
        private void Update()
        {
            foreach (var cm in ChildSpriteMasks)
            {
                UpdateSpriteMask(cm.Child, cm.SpriteMask);
            }
        }
    
        private static void UpdateSpriteMask(SpriteRenderer child, SpriteMask spriteMask)
        {
            spriteMask.sprite = child.sprite;
            spriteMask.frontSortingLayerID = child.sortingLayerID;
            spriteMask.frontSortingOrder = child.sortingOrder - 1;
            spriteMask.backSortingLayerID = child.sortingLayerID;
            spriteMask.backSortingOrder = UnityHelper.Current.OrderMinValue;
            spriteMask.transform.position = child.transform.position;
            spriteMask.transform.rotation = child.transform.rotation;
            spriteMask.transform.localScale = child.transform.localScale;
        }
    
        private class ChildSpriteMask
        {
            public ChildSpriteMask(SpriteRenderer child, SpriteMask spriteMask)
            {
                Child = child;
                SpriteMask = spriteMask;
            }
    
            public SpriteRenderer Child { get; }
            public SpriteMask SpriteMask { get; }
        }
    }
    Ответ написан
    Комментировать
  • Как запускается код в Visual Studio на C#?

    ildarin
    @ildarin
    Это не visual studio, это visual code. Это разные IDE. Установи Visual Studio и не мучайся.
    https://visualstudio.microsoft.com/thank-you-downl...
    Ответ написан
    Комментировать
  • Смена названия месяца?

    ildarin
    @ildarin
    Тут нужно в комплексе смотреть. Очень похоже на какой-то костыль.
    Как правило - код HTML - это уже результат работы фронт части, т.е. это по сути .exe для сайта. Решение на JS редактировать HTML - это как минимум странно. В общем и целом должно решаться редактированием того кода, который этот самый DIV и создает. Но тем не менее:

    var d2 = document.createElement('div')
    document.body.append(d2)
    
    var d = document.createElement('div')
    d.innerText = '31 января'
    d2.append(d)
    
    var replaces = [['января','февраля']]
    
    new Array(document.querySelectorAll('div')).filter(d=>d.innerText='31 января').forEach(a=>{
    replaces.forEach(r=>{
      /** @type {string} */
      var t = a.innerText
      a.innerText = t.replace(r[0],r[1])
    })
    console.log( a.innerText)
    })
    Ответ написан
    Комментировать
  • Как происходит балансировка сложности уровней игры?

    ildarin
    @ildarin
    Балансировка сложности достаточно тонкий вопрос и сугубо индивидуальный. Многое зависит от геймплея и других факторов. Существует большое количество вариаций изменений уровня сложности прохождения игры. Например, количественно/качественное решение. Примеры для скролл-шутера.
    Количественный:
    Самолетик в легком имеет 100хп, у врагов 10хп и 10 супер бомб.
    Самолетик в сложном имеет 3 хп, без супер бомб, летает медленно и враги по 500 хп.
    Т.е. легкий режим — базовый, при более сложном мы «отбираем плюшки». (Или наоборот)
    Прост в реализации.
    Качественный:
    В легком режиме мы можем управлять мышкой, на всех врагов урон действует одинаково.
    В самом сложном — управление кинектом, либо голосом. Некоторые враги абсорбируют урон от обычных пуль, некоторые контрят замораживающие. Нельзя сохраняться по ходу игры, поражение приводит к удалению игры. Пауза запрещена.
    Сложнее в реализации, но интереснее.

    Подбор параметров происходит методом тыка, просчетом формул, личными пристрастиями, тестами и т.д.
    Полноценный ответ на ваш вопрос выйдет на целую статью, но вроде и так в интернете можно найти не мало статей на эту тему, поэтому особо углубляться не буду.
    Ответ написан
    Комментировать