Всё сильно зависит от конфигурации якорей и центра. Для примера, я возьму дефолтный вариант:
Код будет как-то так выглядеть:
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;
}
}
}