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:
2018-09-19 18:26:56 +02:00
parent bd9a9150d9
commit 24319b51a2
10 changed files with 604 additions and 188 deletions

View File

@@ -24,6 +24,7 @@ namespace RothenburgAR
UIManager.Instance.InitStartView();
InputManager.Instance.Initialize();
var init = DisplayManager.Instance;
}
void InitializeData()

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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)
{