Как менять размер GameObject в зависимости от размера камеры Unity2d
У меня в Камере, Size меняется (режим Orthographic), но мне надо - что бы при этом все объекты на фоне тоже увеличивались пропорционально
Ответы (1 шт):
Автор решения: Alexandr Kosolobov
→ Ссылка
Как предложил Максим Фисман вашу проблему можно решить следующим образом:
- Создать событие увеличения размера персонажа
- Сделать скрипт Scalable для объектов, изменяющих размер. Они должны реализовать функцию увеличения размера Scale с параметром как у персонажа
- Подписать этот метод на событие увеличения размера
Какие проблемы вы можете встретить:
- Объекты не будут отдаляться друг от друга при увеличении размера. Это может привести к наслаиванию объектов друг на друга
Решение:
- Объединить все объекты окружения "изменяющих свой размер" в один префаб или пустой объект и повесить скрипт 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;
}
}
}