Я пытаюсь создать речевые пузыри, визуализируя два объекта, пузырь и треугольник под ним.
Для этого у меня есть две части пузыря.Одним из них является фактический пузырь, он реализован с помощью изображения и является частью моего пользовательского интерфейса.Другой - под ним треугольник, он реализован с использованием единицы GL, рисующей треугольник.
Проблема в том, что этот треугольник, который я рисую, используя Unity GL и положение области просмотра, не масштабируется с масштабным коэффициентом моего холста, который установлен на "Масштаб с размером экрана" .Но пузырь, который является частью холста, конечно, масштабируется (я также меняю его положение, учитывая масштабный коэффициент холста).Я понятия не имею, как применить это к моему треугольнику GL все же.Как я могу масштабировать свой треугольник по коэффициенту масштабирования?
Максимальный снимок экрана в единстве, 16: 9, 1600x900
![](https://i.stack.imgur.com/3iDyn.jpg)
Работает нормально,пузырь находится на вершине треугольника
Не развернутый скриншот в единстве, 16: 9, 800x450
![](https://i.stack.imgur.com/IYv0y.png)
Треугольник здесьтакой же размер в пикселях, как на предыдущем скриншоте.Это не масштабирование с масштабным коэффициентом, как сам пузырь.
Вот мой код:
void LateUpdate()
{
//find out the position on the screen of this game object
goScreenPos = Camera.main.WorldToScreenPoint(goTransform.position);
float scaleFactor = Canvas.gameObject.GetComponent<Canvas>().scaleFactor;
Vector2 finalPosition = new Vector2(goScreenPos.x / scaleFactor, goScreenPos.y / scaleFactor);
goViewportPos.x = goScreenPos.x / (float)Screen.width ;
goViewportPos.y = goScreenPos.y / (float)Screen.height;
Vector2 positionOfImage = new Vector2(finalPosition.x - centerOffsetX , finalPosition.y - centerOffsetY + offsetY);
if (createdImageObject == null)
{
createdImageObject = Instantiate(imageObject);
createdImageObject.transform.SetParent(Canvas);
}
createdImageObject.GetComponent<RectTransform>().anchoredPosition = new Vector3(positionOfImage.x, positionOfImage.y, 0);
}
И рендеринг GL:
void OnRenderObject()
{
//push current matrix into the matrix stack
GL.PushMatrix();
//set material pass
mat.SetPass(0);
//load orthogonal projection matrix
GL.LoadOrtho();
//a triangle primitive is going to be rendered
GL.Begin(GL.TRIANGLES);
//set the color
GL.Color(Color.white);
//Define the triangle vetices
GL.Vertex3(goViewportPos.x, goViewportPos.y+(offsetY/3)/Screen.height, 0.1f);
GL.Vertex3(goViewportPos.x - (bubbleWidth/3)/(float)Screen.width, goViewportPos.y+offsetY/Screen.height, 0.1f);
GL.Vertex3(goViewportPos.x - (bubbleWidth/8)/(float)Screen.width, goViewportPos.y+offsetY/Screen.height, 0.1f);
GL.End();
//pop the orthogonal matrix from the stack
GL.PopMatrix();
}
Я позаимствовал код изэто руководство
Оно действительно старое, поэтому я пытаюсь изменить его для нового пользовательского интерфейса Unity вместо GUI.Но интерфейс отзывчивый, а GL - нет.Вот почему у меня такие проблемы.
Что мне делать?Как я могу масштабировать свой треугольник с масштабным коэффициентом?Или я должен сделать что-то еще, чтобы решить эту проблему?