집게사장의 꿈

UI 회전 배치[룰렛] 본문

유니티

UI 회전 배치[룰렛]

Krapboss 2024. 10. 26. 17:35

 

목적

서버에서 정보를 얻어와 UI에 정보를 뿌려주기 위해 화면에 원형으로 배치하기 위함
정보의 개수에 따라 0도가 되는 각도를 기준으로 360도 회전 시킴

 


 

설명

 

예시


시작 각도 = 90도
개수 6개 일때

 

 


 

코드
/// <summary>
///룰렛의 각 Entity의 현재 회전값과 그에 따른 위치값을 받아옵니다.
/// </summary>
public List<(float Rot, float x, float y)> GetRouletteRotate(int n, float defaultRot = 90.0f)
{
    List<(float Rot, float x, float y)> info = new List<(float Rot, float x, float y)>();

    float rotA = 360.0f / n;
    float rotB = rotA / 2.0f;
    float def = defaultRot;

    for (int i = 0; i < n; i++)
    {
        //원형에서 좌표값을 받기 위한 값
        float R = def - (rotA * i) - rotB;
        if (R < 0) R = 360.0f + R;

        float Rot = -(rotA * i + rotB);

        float rad = R * Mathf.Deg2Rad;
        float X = Mathf.Cos(rad); //Sin Cos에 - 값이 들어가도 괜찮음 결과는 360 - N으로 처리됨
        float Y = Mathf.Sin(rad);

        info.Add((Rot, X, Y));

        Debug.Log($"{R} {Rot} {rad} {X} {Y}");
    }

    return info;
}

 

 

생각할 점

Pivot은 Center
Anchor도 Center