Здесь новичок, использующий Unity. Я использую перспективную камеру с холстом мирового пространства, который меняет положение в зависимости от того, какой персонаж говорит (например, речевой пузырь над его головой).
Я хочу, чтобы холст не выходил за пределы экрана когда персонаж говорит за кадром, но я борюсь с логом c. Нужно ли мне получить только ширину и высоту камеры и преобразовать их в мировое пространство для зажима? Вот мой текущий код:
void PositionCanvas()
{
if (character != null)
{
Vector2 screenBounds = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, Camera.main.transform.position.z)); // Get the screen bounds in world units
Vector2 targetPosition = new Vector2(GetCharacterPosition().x, GetCharacterPosition().y + charHeight * dialogueBoxHeight); // The target canvas position above the character sprite
targetPosition.x = Mathf.Clamp(targetPosition.x, screenBounds.x + objectSize.x, screenBounds.x * -1 - objectSize.x);
targetPosition.y = Mathf.Clamp(targetPosition.y, screenBounds.y + objectSize.y, screenBounds.y * -1 - objectSize.y);
transform.position = targetPosition;
}
}
Вот результат этого кода.
Как показано на гифке, положение Y холста, похоже, ограничено край экрана, но положение X игнорируется до тех пор, пока не достигнет точки, в которой он начинает следовать за своей целью. произвольные мировые числа (-5, 5), но я понимаю, что это долгосрочное решение.
Любые указания на то, что я делаю неправильно, были бы очень признательны. Большое спасибо.