반응형
아래의 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:
Unity Pro:
Unity 프리미엄 학습:
반응형
'개발 > Unity' 카테고리의 다른 글
유니티 - Light Rotate로 간단히 낮과 밤 구현하기 (0) | 2022.03.24 |
---|---|
유니티 - 타임 슬라이더 만들기 (Time Slider) (0) | 2022.03.24 |
유니티 Color Picker로 오브젝트 색깔 변경하기 (0) | 2022.03.20 |
유니티 색상 변경 에디터 만들기 (Circle Color Picker) (0) | 2022.03.20 |
유니티 C# Dictionary와 delegate를 이용한 함수 포인터 (0) | 2022.03.18 |
댓글