Skip to content

Instantly share code, notes, and snippets.

@tsubaki
Created April 8, 2016 14:28
Show Gist options
  • Select an option

  • Save tsubaki/60037be0f2b43b526841b60a40278a2b to your computer and use it in GitHub Desktop.

Select an option

Save tsubaki/60037be0f2b43b526841b60a40278a2b to your computer and use it in GitHub Desktop.
ターンテーブルなレイアウトグループ
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class TurntableLayoutGroup : UIBehaviour, ILayoutGroup, IDragHandler {
[SerializeField] float distance = 100;
[SerializeField] float offset = 0;
[SerializeField] float speed;
protected override void OnValidate ()
{
base.OnValidate ();
Arrange ();
}
public void SetLayoutHorizontal (){ }
public void SetLayoutVertical ()
{
Arrange ();
}
public void OnDrag (PointerEventData eventData)
{
var pos = transform.position;
float slide = 0;
slide += eventData.delta.y * (pos.x - eventData.position.x < 0 ? 1 : -1);
slide += eventData.delta.x * (pos.y - eventData.position.y < 0 ? -1 : 1);
speed = slide * 0.5f;
Arrange ();
}
void Update()
{
offset += speed;
speed = speed * 0.8f;
Arrange ();
}
void Arrange()
{
float angle = 360 / transform.childCount;
for (int i = 0; i < transform.childCount; i++) {
var child = transform.GetChild (i) as RectTransform;
float internalAngle = angle * i + offset;
child.anchoredPosition = new Vector2(
Mathf.Cos(internalAngle * Mathf.Deg2Rad),
Mathf.Sin(internalAngle * Mathf.Deg2Rad)) * distance;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment