Столкнулся с очень странной проблемой. Сделал кастомный рантайм лайоут для раскладки карт "веером" (код ниже под спойлером). Настроил все константы, карты красиво разложились, перехожу к дальнейшим правкам и тут начинает слетать все что я делал. Помогает исправление констант радиусов, расстояния между карт, при этом зачастую чтобы вернуться к прежнему виду приходиться менять с тысячных до целых! При этом откат изменений после которых все слетело - не помогает. Вообще, если создать объект рядом и начать править его - опять все слетает. Такое ощущение что юнити не корретно обновляет рантайм раскладку, и я не вижу актуальных изменений. Уже несколько дней воюю с этой проблемой. Может кто-то что-то подскажет?
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace UnityEngine.UI.Extensions
{
[AddComponentMenu("Layout/Extensions/Hand Layout")]
public class HandLayout : LayoutGroup
{
[System.Serializable]
public enum HandType
{
my,
enemy,
}
public HandType type;
protected override void OnEnable() { base.OnEnable(); CalculateRadial(); }
public override void SetLayoutHorizontal()
{
}
public override void SetLayoutVertical()
{
}
public override void CalculateLayoutInputVertical()
{
CalculateRadial();
}
public override void CalculateLayoutInputHorizontal()
{
CalculateRadial();
}
#if UNITY_EDITOR
protected override void OnValidate()
{
base.OnValidate();
CalculateRadial();
}
#endif
void CalculateRadial()
{
m_Tracker.Clear();
if (transform.childCount == 0)
return;
var center = new Vector2(0.5f, 1.2f);
var horRad = 1920 * 0.35f;
var verRad = (type == HandType.my ? -1 : 1) * 1080 * 0.3f;
for (int i = 0; i < transform.childCount; i++)
{
Card card = transform.GetChild(i).GetComponent<Card>();
if (card != null)
{
m_Tracker.Add(this, card.GetComponent<RectTransform>(),
DrivenTransformProperties.Anchors |
DrivenTransformProperties.AnchoredPosition |
DrivenTransformProperties.Pivot);
var cardSize = card.GetComponent<RectTransform>().sizeDelta;
Debug.Log(cardSize);
var CardSpread = 0.5f * cardSize.x * 0.5f;
int numberOfCards = this.transform.childCount;
var angle = Mathf.PI / 2 + CardSpread * (numberOfCards / 2 - i);
var OvalAngleVector = new Vector2(horRad * Mathf.Cos(angle), -verRad * Mathf.Sin(angle));
var pos = center + OvalAngleVector - cardSize / 2;
card.transform.localPosition = new Vector3(pos.x, pos.y, 0);
}
}
}
}
}
using System.Collections.Generic;
using UnityEngine;
namespace UnityEngine.UI.Extensions
{
[AddComponentMenu("Layout/Extensions/Hand Layout")]
public class HandLayout : LayoutGroup
{
[System.Serializable]
public enum HandType
{
my,
enemy,
}
public HandType type;
protected override void OnEnable() { base.OnEnable(); CalculateRadial(); }
public override void SetLayoutHorizontal()
{
}
public override void SetLayoutVertical()
{
}
public override void CalculateLayoutInputVertical()
{
CalculateRadial();
}
public override void CalculateLayoutInputHorizontal()
{
CalculateRadial();
}
#if UNITY_EDITOR
protected override void OnValidate()
{
base.OnValidate();
CalculateRadial();
}
#endif
void CalculateRadial()
{
m_Tracker.Clear();
if (transform.childCount == 0)
return;
var center = new Vector2(0.5f, 1.2f);
var horRad = 1920 * 0.35f;
var verRad = (type == HandType.my ? -1 : 1) * 1080 * 0.3f;
for (int i = 0; i < transform.childCount; i++)
{
Card card = transform.GetChild(i).GetComponent<Card>();
if (card != null)
{
m_Tracker.Add(this, card.GetComponent<RectTransform>(),
DrivenTransformProperties.Anchors |
DrivenTransformProperties.AnchoredPosition |
DrivenTransformProperties.Pivot);
var cardSize = card.GetComponent<RectTransform>().sizeDelta;
Debug.Log(cardSize);
var CardSpread = 0.5f * cardSize.x * 0.5f;
int numberOfCards = this.transform.childCount;
var angle = Mathf.PI / 2 + CardSpread * (numberOfCards / 2 - i);
var OvalAngleVector = new Vector2(horRad * Mathf.Cos(angle), -verRad * Mathf.Sin(angle));
var pos = center + OvalAngleVector - cardSize / 2;
card.transform.localPosition = new Vector3(pos.x, pos.y, 0);
}
}
}
}
}