Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- NavMesh
- 유니티
- stateauthority
- 유니티 해상도 변경
- networkobject.networkid
- networkbehaviourid
- githubdesktopmerge
- 깃허브 데스크탑 합치기
- Github DeskTop Merge
- unity 병합
- nav거리
- 몬스터
- 유니티 해상도
- m585 수리
- m590 수리
- navigation
- 유니티 해상도 설정
- 깃허브 데스크탑 병합
- unity merge
- Unity
- M590
- unity git
- 유니티 브랜치 merge
- 유니티 머지
- 유니티 합치기
- 오브젝트 깜빡임
- nav오브젝트사이거리
- m585
- networkobject
Archives
- Today
- Total
집게사장의 꿈
퍼즐 오브젝트의 Sort 정렬 본문
문제
퍼즐을 클라이언트가 지정하고 진행을 위한 각 퍼즐 조각들을 정렬할 필요가 있었음
그에 대한 방법으로 Scene에서 Z 축을 기준으로 퍼즐 조각들이 될 오브젝트를 배치하고, 배치된 오브젝트의 Sort를 스크립트를 통해 정합니다.
규칙
Sorting 정렬 | 0~ -N 의 범위에서 오브젝트의 Sort를 지정 |
배경 | 배경이 되는 기본 틀이 되는 오브젝트는 맨 뒤에 위치함 |
퍼즐 배치의 예시
정렬
자식 오브젝트 중 PuzzleSortData를 찾아서 Z 축을 기준으로 정렬을 실시하여 순서를 지정한다.
using UnityEngine;
using System.Linq;
/// <summary>
/// 퍼즐 정렬을 위한 중간 데이터
/// </summary>
public class PuzzleSortContainer : MonoBehaviour
{
[SerializeField] PuzzleSortData[] datas;
private void Awake()
{
Destroy(this);
}
public void SortAllPuzzleData()
{
FindChildData();
if (datas.Length < 1 || datas == null) { Debug.LogWarning("PuzzleData[] 존재하지 않습니다."); return; }
//z 축을 기준으로 내림차순으로 정렬합니다. (- 값 일수록 카메라와 가까워짐)
PuzzleSortData[] puzzleDatas = (from data in datas
orderby data.transform.position.z ascending // 오름차순
select data).ToArray();
int sorting = -1;
foreach (PuzzleSortData data in puzzleDatas)
{
data.SetSort(sorting--);
}
Debug.Log($"1 : {puzzleDatas[0].name} / LAST {puzzleDatas[puzzleDatas.Length - 1].name} PuzzleData Sort 정렬 완료");
}
//하위 데이터 초기화
public void Initialize()
{
if (datas.Length < 1 || datas == null) { Debug.LogWarning("PuzzleData[] 존재하지 않습니다."); return; }
foreach(PuzzleSortData data in datas)
{
data.SetInit();
}
datas = null;
Debug.Log("하위 데이터 정렬 초기화");
}
public void FindChildData()
{
datas = GetComponentsInChildren<PuzzleSortData>();
}
}
각 SortData 들은 자신의 Sort를 가지며, 하위 SpriteRenderer를 찾아 Sprite의 Sort를 지정합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 퍼즐 정렬을 위한 개별 데이터
/// </summary>
public class PuzzleSortData : MonoBehaviour
{
[SerializeField] int Sort= -999;//정렬 번호
[SerializeField] SpriteRenderer[] spriteRenderer;//모든 스프라이트 렌더러
private void Awake()
{
Destroy(this);
}
public void SetSort(int sort)
{
if (Sort != -999) { Debug.LogWarning($"이미 정렬된 값이 존재합니다. SortingOrder : {Sort}"); return; }
FindSpriteRenderer();
Sort = sort;
foreach (var renderer in spriteRenderer) renderer.sortingOrder = Sort;
}
public void SetInit()
{
Sort = -999;
foreach (var renderer in spriteRenderer) renderer.sortingOrder = 0;
spriteRenderer = null;
}
//하위 스프라이트 렌더러를 찾습니다.
public void FindSpriteRenderer()
{
//if (spriteRenderer.Length > 0) return;
spriteRenderer = GetComponentsInChildren<SpriteRenderer>();
}
}
게임 시작 시
게임 시작 시 모든 Z 축은 0이 되며, Sort는 기본적으로 1로 지정한다.
그 후, 퍼즐을 배치하게 되면 정해진 Sort로 SpriteRenderer에 지정한다.
'제작 > 한폭의 그림을 만들리' 카테고리의 다른 글
기본 기능 완성 (0) | 2024.06.17 |
---|---|
중복된 퍼즐 조각의 해결 (0) | 2024.06.17 |
카메라 입력 및 OrthographicSize (0) | 2024.06.16 |
중간 결산 24.6.15 (0) | 2024.06.15 |
UI를 통한 퍼즐 조각 꺼내기 (0) | 2024.06.15 |