@LLIKOJIHUK

Как отследить объект за границами камеры?

У меня есть такое приложение, где в месте нажатия пальцем появляется табличка, и она появляется сбоку нажатия пальца(То есть ты нажал, и табличка появилась не в центре нажатия, а немного сместилась в бок), но иногда она появляется за границами камеры, и текст в этой табличке не видно, поэтому я хочу узнать когда именно табличка появится за пределами экрана, и сместить ее в противоположную сторону границы экрана, за которую она вышла.
  • Вопрос задан
  • 100 просмотров
Решения вопроса 1
@Ezekiel4
Охотник на пиратов и сборщик монолитов
Всё сильно зависит от конфигурации якорей и центра. Для примера, я возьму дефолтный вариант:
6323950533beb133518050.png
Код будет как-то так выглядеть:
using UnityEngine;

public class Example : MonoBehaviour {

	// отступы, используйте, если не хотите, чтобы ваша панель спавнилась вплотную к границе
	public float leftMargin = 0f;
	public float rightMargin = 0f;
	public float upMargin = 0f;
	public float bottomMargin = 0f;

	// объект для спавна
	public RectTransform prefab;

	// родительский объект для спавна в него
	public Transform parent;

	private void Update() {
		if (Input.GetMouseButtonDown(0)) {
			// получаем координаты клика
			Vector2 clickPosition = Input.mousePosition;
			// центрируем объект относительно границ экрана
			clickPosition.x -= Screen.width / 2;
			clickPosition.y -= Screen.height / 2;
			// находим общие границы для спавна
			float xMin = (prefab.sizeDelta.x - Screen.width) / 2;
			float xMax = (Screen.width - prefab.sizeDelta.x) / 2;
			float yMin = (prefab.sizeDelta.y - Screen.height) / 2;
			float yMax = (Screen.height - prefab.sizeDelta.y) / 2;
			// делаем отступы
			xMin += leftMargin;
			xMax -= rightMargin;
			yMin += bottomMargin;
			yMax -= upMargin;
			// ограничиваем точку спавна этими границами
			clickPosition.x = Mathf.Clamp(clickPosition.x, xMin, xMax);
			clickPosition.y = Mathf.Clamp(clickPosition.y, yMin, yMax);
			// спавним объект
			var obj = Instantiate(prefab, parent);
			// меняем его местоположение
			obj.localPosition = clickPosition;
		}
	}
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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