First version of DetailsPanel rework
3D Model now is rendered to a texture to simplify layouting in DetailsPanel Fixed bugs in ProjectionEffectBehaviour and DetailsPanelBehaviour caused by CanvasScaler Added CanvasScaler to DisplayManager to easily access global canvas scale
This commit is contained in:
@@ -24,6 +24,7 @@ namespace RothenburgAR
|
||||
UIManager.Instance.InitStartView();
|
||||
|
||||
InputManager.Instance.Initialize();
|
||||
var init = DisplayManager.Instance;
|
||||
}
|
||||
|
||||
void InitializeData()
|
||||
|
||||
@@ -13,6 +13,11 @@ namespace RothenburgAR.UI
|
||||
public TextMeshProUGUI DetailsText;
|
||||
public DetailsModelBehaviour DetailsModel;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
public bool HasModel
|
||||
{
|
||||
get { return _currentDisplayedModelGo != null; }
|
||||
@@ -92,11 +97,11 @@ namespace RothenburgAR.UI
|
||||
public void UpdateOpeningAnimation(Vector3 position)
|
||||
{
|
||||
float duration = .4f;
|
||||
var scale = DisplayManager.Instance.GetComponent<RectTransform>().localScale.x;
|
||||
Vector3 screenMiddle = new Vector3(Screen.width / scale, Screen.height / scale, 0) * 0.5f;
|
||||
|
||||
Vector3 startPos = Camera.main.WorldToScreenPoint(position) -
|
||||
(0.5f * new Vector3(Screen.width, Screen.height, 0));
|
||||
Vector3 endPos = -0.5f * new Vector3(Screen.width, Screen.height, 0) + new Vector3(25, 25, 0);
|
||||
|
||||
Vector3 startPos = Camera.main.WorldToScreenPoint(position) / scale - screenMiddle;
|
||||
Vector3 endPos = -screenMiddle + new Vector3(25, 25, 0);
|
||||
|
||||
float startScale = 0.05f;
|
||||
float endScale = 1;
|
||||
|
||||
@@ -29,6 +29,12 @@ namespace RothenburgAR.UI
|
||||
instance = canvas.AddComponent<DisplayManager>();
|
||||
DontDestroyOnLoad(canvas);
|
||||
|
||||
var scaler = canvas.AddComponent<UnityEngine.UI.CanvasScaler>();
|
||||
scaler.uiScaleMode = UnityEngine.UI.CanvasScaler.ScaleMode.ScaleWithScreenSize;
|
||||
scaler.referenceResolution = new Vector2(1024, 1024);
|
||||
scaler.screenMatchMode = UnityEngine.UI.CanvasScaler.ScreenMatchMode.MatchWidthOrHeight;
|
||||
scaler.matchWidthOrHeight = .5f;
|
||||
|
||||
instance.resolution = new Vector2(Screen.width, Screen.height);
|
||||
instance.orientation = Screen.orientation;
|
||||
}
|
||||
|
||||
@@ -87,23 +87,23 @@ namespace RothenburgAR.UI
|
||||
if (!enabled || SelectedPOI == null)
|
||||
return;
|
||||
|
||||
|
||||
transform.localPosition = Camera.main.WorldToScreenPoint(SelectedPOI.transform.position) -
|
||||
(0.5f * new Vector3(Screen.width, Screen.height, 0));
|
||||
var scale = DisplayManager.Instance.GetComponent<RectTransform>().localScale.x;
|
||||
Vector3 screenMiddle = new Vector3(Screen.width / scale, Screen.height / scale, 0) * 0.5f;
|
||||
transform.localPosition = Camera.main.WorldToScreenPoint(SelectedPOI.transform.position) / scale - screenMiddle;
|
||||
|
||||
RectTransform rt = UIManager.Instance.ARViewBehaviour.DetailsPanel.GetComponent<RectTransform>();
|
||||
Vector3 panelCenter = rt.transform.localPosition;
|
||||
Vector3[] panelCorners = new Vector3[4];
|
||||
rt.GetLocalCorners(panelCorners);
|
||||
|
||||
|
||||
for (int i = 0; i < panelCorners.Length; i++)
|
||||
{
|
||||
var scale = rt.localScale;
|
||||
var localScale = rt.localScale;
|
||||
var corner = panelCorners[i];
|
||||
corner.Scale(scale);
|
||||
corner.Scale(localScale);
|
||||
panelCorners[i] = corner;
|
||||
}
|
||||
|
||||
|
||||
List<Vector3> vertices = GenerateVertices(panelCenter, panelCorners);
|
||||
List<Vector2> uvs = GenerateUVs(vertices.Count);
|
||||
List<Vector3> normals = GenerateNormals(vertices.Count);
|
||||
@@ -157,18 +157,18 @@ namespace RothenburgAR.UI
|
||||
if (positionType == PositionType.Right || positionType == PositionType.Left)
|
||||
{
|
||||
var addedVector = new Vector3(0, 2);
|
||||
vertices[(int) CornerIndex.TopLeft] -= addedVector;
|
||||
vertices[(int) CornerIndex.TopRight] -= addedVector;
|
||||
vertices[(int) CornerIndex.BottomLeft] += addedVector;
|
||||
vertices[(int) CornerIndex.BottomRight] += addedVector;
|
||||
vertices[(int)CornerIndex.TopLeft] -= addedVector;
|
||||
vertices[(int)CornerIndex.TopRight] -= addedVector;
|
||||
vertices[(int)CornerIndex.BottomLeft] += addedVector;
|
||||
vertices[(int)CornerIndex.BottomRight] += addedVector;
|
||||
}
|
||||
else if (positionType == PositionType.Top || positionType == PositionType.Bottom)
|
||||
{
|
||||
var addedVector = new Vector3(2, 0);
|
||||
vertices[(int) CornerIndex.BottomLeft] += addedVector;
|
||||
vertices[(int) CornerIndex.TopLeft] += addedVector;
|
||||
vertices[(int) CornerIndex.TopRight] -= addedVector;
|
||||
vertices[(int) CornerIndex.BottomRight] -= addedVector;
|
||||
vertices[(int)CornerIndex.BottomLeft] += addedVector;
|
||||
vertices[(int)CornerIndex.TopLeft] += addedVector;
|
||||
vertices[(int)CornerIndex.TopRight] -= addedVector;
|
||||
vertices[(int)CornerIndex.BottomRight] -= addedVector;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -188,7 +188,7 @@ namespace RothenburgAR.UI
|
||||
{
|
||||
result = PositionType.TopLeft;
|
||||
}
|
||||
else if (localPosition.x > absoluteCorners[(int) CornerIndex.TopRight].x)
|
||||
else if (localPosition.x > absoluteCorners[(int)CornerIndex.TopRight].x)
|
||||
{
|
||||
result = PositionType.TopRight;
|
||||
}
|
||||
@@ -204,7 +204,7 @@ namespace RothenburgAR.UI
|
||||
{
|
||||
result = PositionType.Left;
|
||||
}
|
||||
else if (localPosition.x > absoluteCorners[(int) CornerIndex.TopRight].x)
|
||||
else if (localPosition.x > absoluteCorners[(int)CornerIndex.TopRight].x)
|
||||
{
|
||||
result = PositionType.Right;
|
||||
}
|
||||
@@ -219,7 +219,7 @@ namespace RothenburgAR.UI
|
||||
{
|
||||
result = PositionType.BottomLeft;
|
||||
}
|
||||
else if (localPosition.x > absoluteCorners[(int) CornerIndex.TopRight].x)
|
||||
else if (localPosition.x > absoluteCorners[(int)CornerIndex.TopRight].x)
|
||||
{
|
||||
result = PositionType.BottomRight;
|
||||
}
|
||||
@@ -268,7 +268,6 @@ namespace RothenburgAR.UI
|
||||
}
|
||||
return triangles.ToArray();
|
||||
}
|
||||
|
||||
|
||||
private List<Vector3> GenerateVertices(Vector3 panelCenter, Vector3[] panelCorners)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user