반응형
✔ Unity3D - 오브젝트 공간 자동 정렬
Object Position Sort
공간에 오브젝트를 특정 한 기준점에서 좌우로 정렬하고 싶은 경우에 사용한다.
X, Z방향으로 정렬하고 추가, 제거 가능
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjectPositionSort : MonoBehaviour
{
//테스트를 위한 오브젝트
public GameObject testobj;
//기준 포지션
public Transform standardPosition;
private Vector3 standardVector;
//기준포지션안에 관리될 오브젝트들
private List<GameObject> items = new List<GameObject>();
//Row 개수
public int row = 2;
//최대 정렬 가능한 개수
public int MAX_COUNT = 10;
//오브젝트간 간격
public float distance = 2;
// Start is called before the first frame update
void Start()
{
standardVector = standardPosition.position;
}
//생성 테스트 예제
public void CreateTest()
{
if(items.Count < MAX_COUNT)
{
GameObject game = Instantiate(testobj);
game.name = Random.Range(1, 100).ToString();
game.SetActive(true);
AddItem(game);
}
}
//아이템 추가
public void AddItem(GameObject item)
{
//최대개수와 중복오브젝트는 패스
if (MAX_COUNT > items.Count && !items.Contains(item))
{
items.Add(item);
UpdateSort();
}
}
//모두 삭제
public void RemoveAll()
{
items.Clear();
}
//특정항목을 제거한다.
public void RemoveItem(GameObject item)
{
if(items.Contains(item))
{
items.Remove(item);
UpdateSort();
}
}
//기준점에서 x,z 배열로 정렬
public void UpdateSort()
{
float xOffset = standardVector.x;
float zOffset = standardVector.z;
for (int i = 0; i < items.Count; i++)
{
if(0 == i % row && i != 0)
{
xOffset = standardVector.x;
zOffset += distance;
}
items[i].transform.position = new Vector3(xOffset + distance * (i % row), standardVector.y, zOffset);
}
}
}
자세한 내용은 아래 영상 참조
https://www.youtube.com/watch?v=r3jW6fGVkVI&feature=youtu.be
감사합니다.
반응형
'Programming > Unity' 카테고리의 다른 글
[Unity3D] NVIDA Flex Error - ArgumentException: ComputeBuffer.SetData() (121) | 2020.11.06 |
---|---|
[Unity3D] 마우스 클릭 시 UI인지 3D객체 인지 구별 (2) | 2020.10.16 |
[Unity] Unity에 Visual Studio를 연결하기 (4) | 2019.10.24 |
[Unity] 유니티 기초 탈출기 - Part.0 [Visual 2017 설치, 유니티 설치] (4) | 2019.10.24 |
[Unity] 유니티 3D 안정적인 버전은? (31) | 2019.10.23 |
댓글