본문 바로가기
개발/Unity

유니티 - 자식 오브젝트를 원형으로 배치하기 (Circular Arrangement)

by 피로물든딸기 2022. 3. 23.
반응형

Unity 전체 링크

 

아래의 Cube의 자식 오브젝트들을 원형으로 배치해보자.

 

먼저 원형으로 배치하기 위해 적당한 반지름을 정한다.

float radius = 2.0f;

 

transform에는 자식 오브젝트의 개수를 구할 수 있는 childCount가 있다.

int numOfChild = transform.childCount;

 

자식 오브젝트의 개수를 구하였으므로, 적절한 각도를 배치한다.

360도 = 2pi이므로, 오브젝트 개수로 나눈 후 i 를 곱하면 된다.

그리고 GetChild(index)를 이용해 i 번째 자식 오브젝트에 접근하여 position을 수정한다.

    for (int i = 0; i < numOfChild; i++)
    {
        float angle = i * (Mathf.PI * 2.0f) / numOfChild;

        GameObject child = transform.GetChild(i).gameObject;

        child.transform.position
            = transform.position + (new Vector3(Mathf.Cos(angle), Mathf.Sin(angle), 0)) * radius;
    }

 

position이 수정되는 공식은 아래와 같다.

원점(부모 오브젝트)를 기준으로 (cosθ, sinθ, 0) * 반지름의 벡터 좌표를 더해주면 아래의 P의 좌표가 된다.

 

ExecuteInEditMode를 추가하여 실행하면, 

편집 모드에서 실행되어 플레이 종료 후에도 오브젝트가 그대로 배치된다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[ExecuteInEditMode]
public class CircularArrangement : MonoBehaviour
{
    float radius = 2.0f;

    void Start()
    {
        int numOfChild = transform.childCount;

        for (int i = 0; i < numOfChild; i++)
        {
            float angle = i * (Mathf.PI * 2.0f) / numOfChild;

            GameObject child = transform.GetChild(i).gameObject;

            child.transform.position
                = transform.position + (new Vector3(Mathf.Cos(angle), Mathf.Sin(angle), 0)) * radius;
        }
    }
}

 

아래와 같이 오브젝트가 배치되는 것을 알 수 있다.

 

하지만 실제로 아래와 같은 좌표로 배치되는데 시계 방향으로 배치하고 싶다면 angle을 수정해야 한다.

 

아래와 같이 각도를 수정하면 12시를 기준으로 시계방향으로 배치할 수 있다.

최초의 각도를 θ = 90º 에서 시계 방향(-)으로 각도를 정해주었다.

float angle = Mathf.PI * 0.5f - i * (Mathf.PI * 2.0f) / numOfChild;

 

영상을 보면 Sphere의 개수에 상관없이 제대로 배치되는 것을 알 수 있다.

 

Unity Plus:

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Unity Pro:

 

Unity Pro

The complete solutions for professionals to create and operate.

unity.com

 

Unity 프리미엄 학습:

 

Unity Learn

Advance your Unity skills with live sessions and over 750 hours of on-demand learning content designed for creators at every skill level.

unity.com

반응형

댓글