Как менять размер GameObject в зависимости от размера камеры Unity2d

У меня в Камере, Size меняется (режим Orthographic), но мне надо - что бы при этом все объекты на фоне тоже увеличивались пропорционально


Ответы (1 шт):

Автор решения: Alexandr Kosolobov

Как предложил Максим Фисман вашу проблему можно решить следующим образом:

  1. Создать событие увеличения размера персонажа
  2. Сделать скрипт Scalable для объектов, изменяющих размер. Они должны реализовать функцию увеличения размера Scale с параметром как у персонажа
  3. Подписать этот метод на событие увеличения размера

Какие проблемы вы можете встретить:

  1. Объекты не будут отдаляться друг от друга при увеличении размера. Это может привести к наслаиванию объектов друг на друга

Решение:

  1. Объединить все объекты окружения "изменяющих свой размер" в один префаб или пустой объект и повесить скрипт Scalable в на "родитель"

Правка1: в моем представлении код должен выглядить примерно следующим образом:

public class Scalable : MonoBehaviour
{
    [SerializeField] private ScaleEventManager ScaleEventKeeper;

    private void OnScaleEvent(float scale)
    {
        transform.localScale = new Vector3(scale, scale, scale);
    }

    private void EnebleScaling()
    {
        ScaleEventKeeper.ScaleEvent += OnScaleEvent;
    }

    private void DisableScaling()
    {
        ScaleEventKeeper.ScaleEvent -= OnScaleEvent;
    }
}

public class ScaleEventManager : MonoBehaviour
{
    public delegate void ScaleDelegate(float scale);
    public event ScaleDelegate ScaleEvent;
    private const float WAIT_FOR_SECONDS = 10f;
    private const float STARTING_SCALE = 1f;
    private const float SCALE_MODIFIER = 1.1f;
    private float _currentScale;

    private void Awake()
    {
        StartCoroutine(RescaleEverySeconds());
    }

    private IEnumerator RescaleEverySeconds()
    {
        _currentScale = STARTING_SCALE * SCALE_MODIFIER;
        while (true)
        {
            yield return new WaitForSeconds(WAIT_FOR_SECONDS);
            ScaleEvent(_currentScale);
            _currentScale *= SCALE_MODIFIER;
        }
    }
}
→ Ссылка